diff --git a/.gitignore b/.gitignore index 8db7c87..79d1ea1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ hwloc-1.0.2.tar.bz2 +/hwloc-1.1.tar.bz2 diff --git a/2967_lstopo.patch b/2967_lstopo.patch new file mode 100644 index 0000000..7dbc817 --- /dev/null +++ b/2967_lstopo.patch @@ -0,0 +1,149458 @@ +diff -uNr hwloc-1.1/config/config.guess hwloc-1.1rc6r2967_final/config/config.guess +--- hwloc-1.1/config/config.guess 2010-12-16 22:48:40.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/config/config.guess 2010-12-31 23:48:21.815817987 +0100 +@@ -1,10 +1,10 @@ + #! /bin/sh + # Attempt to guess a canonical system name. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + # Free Software Foundation, Inc. + +-timestamp='2010-09-24' ++timestamp='2009-11-20' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -56,9 +56,8 @@ + GNU config.guess ($timestamp) + + Originally written by Per Bothner. +-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +-Software Foundation, Inc. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, ++2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -92,7 +91,7 @@ + exit 1 + fi + +-trap 'exit 1' HUP INT TERM ++trap 'exit 1' 1 2 15 + + # CC_FOR_BUILD -- compiler used by this script. Note that the use of a + # compiler to aid in system detection is discouraged as it requires +@@ -106,7 +105,7 @@ + + set_cc_for_build=' + trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ; ++trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; + : ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || +@@ -552,7 +551,7 @@ + echo rs6000-ibm-aix3.2 + fi + exit ;; +- *:AIX:*:[4567]) ++ *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 +@@ -968,9 +967,6 @@ + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; +- tile*:Linux:*:*) +- echo ${UNAME_MACHINE}-tilera-linux-gnu +- exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; +@@ -1234,9 +1230,6 @@ + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; +- NEO-?:NONSTOP_KERNEL:*:*) +- echo neo-tandem-nsk${UNAME_RELEASE} +- exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; +diff -uNr hwloc-1.1/config/config.sub hwloc-1.1rc6r2967_final/config/config.sub +--- hwloc-1.1/config/config.sub 2010-12-16 22:48:40.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/config/config.sub 2010-12-31 23:48:21.818818354 +0100 +@@ -1,10 +1,10 @@ + #! /bin/sh + # Configuration validation subroutine script. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + # Free Software Foundation, Inc. + +-timestamp='2010-12-11' ++timestamp='2009-11-20' + + # This file is (in principle) common to ALL GNU software. + # The presence of a machine in this file suggests that SOME GNU software +@@ -75,9 +75,8 @@ + version="\ + GNU config.sub ($timestamp) + +-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +-Software Foundation, Inc. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, ++2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -124,9 +123,8 @@ + # Here we must recognize all the valid KERNEL-OS combinations. + maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` + case $maybe_os in +- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ +- linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ +- knetbsd*-gnu* | netbsd*-gnu* | \ ++ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ ++ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os +@@ -283,7 +281,6 @@ + | moxie \ + | mt \ + | msp430 \ +- | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ +@@ -297,7 +294,7 @@ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ +- | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ ++ | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ +@@ -305,15 +302,6 @@ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; +- c54x) +- basic_machine=tic54x-unknown +- ;; +- c55x) +- basic_machine=tic55x-unknown +- ;; +- c6x) +- basic_machine=tic6x-unknown +- ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown +@@ -345,7 +333,7 @@ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ +- | c[123]* | c30-* | [cjt]90-* | c4x-* \ ++ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ +@@ -379,7 +367,6 @@ + | mmix-* \ + | mt-* \ + | msp430-* \ +- | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ +@@ -393,8 +380,7 @@ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ +- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ +- | tile-* | tilegx-* \ ++ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ +@@ -494,15 +480,6 @@ + basic_machine=powerpc-ibm + os=-cnk + ;; +- c54x-*) +- basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` +- ;; +- c55x-*) +- basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` +- ;; +- c6x-*) +- basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` +- ;; + c90) + basic_machine=c90-cray + os=-unicos +@@ -539,7 +516,7 @@ + basic_machine=craynv-cray + os=-unicosmp + ;; +- cr16 | cr16-*) ++ cr16) + basic_machine=cr16-unknown + os=-elf + ;; +@@ -862,12 +839,6 @@ + np1) + basic_machine=np1-gould + ;; +- neo-tandem) +- basic_machine=neo-tandem +- ;; +- nse-tandem) +- basic_machine=nse-tandem +- ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; +@@ -1102,10 +1073,17 @@ + basic_machine=t90-cray + os=-unicos + ;; +- # This must be matched before tile*. +- tilegx*) +- basic_machine=tilegx-unknown +- os=-linux-gnu ++ tic54x | c54x*) ++ basic_machine=tic54x-unknown ++ os=-coff ++ ;; ++ tic55x | c55x*) ++ basic_machine=tic55x-unknown ++ os=-coff ++ ;; ++ tic6x | c6x*) ++ basic_machine=tic6x-unknown ++ os=-coff + ;; + tile*) + basic_machine=tile-unknown +@@ -1316,8 +1294,7 @@ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ +- | -mingw32* | -linux-gnu* | -linux-android* \ +- | -linux-newlib* | -linux-uclibc* \ ++ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ +@@ -1458,8 +1435,6 @@ + -dicos*) + os=-dicos + ;; +- -nacl*) +- ;; + -none) + ;; + *) +@@ -1500,15 +1475,6 @@ + c4x-* | tic4x-*) + os=-coff + ;; +- tic54x-*) +- os=-coff +- ;; +- tic55x-*) +- os=-coff +- ;; +- tic6x-*) +- os=-coff +- ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 +diff -uNr hwloc-1.1/configure hwloc-1.1rc6r2967_final/configure +--- hwloc-1.1/configure 2010-12-16 22:47:59.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/configure 2010-12-31 23:48:22.634918209 +0100 +@@ -1,6 +1,6 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.68 for hwloc 1.1. ++# Generated by GNU Autoconf 2.68 for hwloc 1.1rc6. + # + # Report bugs to . + # +@@ -570,8 +570,8 @@ + # Identity of this package. + PACKAGE_NAME='hwloc' + PACKAGE_TARNAME='hwloc' +-PACKAGE_VERSION='1.1' +-PACKAGE_STRING='hwloc 1.1' ++PACKAGE_VERSION='1.1rc6' ++PACKAGE_STRING='hwloc 1.1rc6' + PACKAGE_BUGREPORT='http://www.open-mpi.org/community/help/' + PACKAGE_URL='' + +@@ -1434,7 +1434,7 @@ + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +-\`configure' configures hwloc 1.1 to adapt to many kinds of systems. ++\`configure' configures hwloc 1.1rc6 to adapt to many kinds of systems. + + Usage: $0 [OPTION]... [VAR=VALUE]... + +@@ -1509,7 +1509,7 @@ + + if test -n "$ac_init_help"; then + case $ac_init_help in +- short | recursive ) echo "Configuration of hwloc 1.1:";; ++ short | recursive ) echo "Configuration of hwloc 1.1rc6:";; + esac + cat <<\_ACEOF + +@@ -1669,7 +1669,7 @@ + test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF +-hwloc configure 1.1 ++hwloc configure 1.1rc6 + generated by GNU Autoconf 2.68 + + Copyright (C) 2010 Free Software Foundation, Inc. +@@ -2316,7 +2316,7 @@ + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + +-It was created by hwloc $as_me 1.1, which was ++It was created by hwloc $as_me 1.1rc6, which was + generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ +@@ -3257,7 +3257,7 @@ + + # Define the identity of the package. + PACKAGE='hwloc' +- VERSION='1.1' ++ VERSION='1.1rc6' + + + cat >>confdefs.h <<_ACEOF +@@ -21034,7 +21034,7 @@ + # report actual input values of CONFIG_FILES etc. instead of their + # values after options handling. + ac_log=" +-This file was extended by hwloc $as_me 1.1, which was ++This file was extended by hwloc $as_me 1.1rc6, which was + generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES +@@ -21104,7 +21104,7 @@ + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" + ac_cs_version="\\ +-hwloc config.status 1.1 ++hwloc config.status 1.1rc6 + configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00001.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00001.html +--- hwloc-1.1/doc/doxygen-doc/html/a00001.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00001.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,106 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Terms and Definitions +- +- +- +- +- +- +-
+-
+-

Terms and Definitions

+-
+-
+-
+-
Object
+-

Interesting kind of part of the system, such as a Core, a Cache, a Memory node, etc. The different types detected by hwloc are detailed in the hwloc_obj_type_t enumeration.

+-

They are topologically sorted by CPU set into a tree.

+-

+-
+-
CPU set
+-

The set of logical processors (or processing units) logically included in an object (if it makes sense). They are always expressed using physical logical processor numbers (as announced by the OS). They are implemented as the hwloc_bitmap_t opaque structure. hwloc CPU sets are just masks, they do not have any relation with an operating system actual binding notion like Linux' cpusets.

+-

+-
+-
Node set
+-

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 hwloc_bitmap_t opaque structure. as bitmaps.

+-

+-
+-
Bitmap
+-

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 hwloc_bitmap_t opaque structure.

+-

+-
+-
Parent object
+-

The object logically containing the current object, for example because its CPU set includes the CPU set of the current object.

+-

+-
+-
Ancestor object
+-

The parent object, or its own parent object, and so on.

+-

+-
+-
Children object(s)
+-

The object (or objects) contained in the current object because their CPU set is included in the CPU set of the current object.

+-

+-
+-
Arity
+-

The number of children of an object.

+-

+-
+-
Sibling objects
+-

Objects of the same type which have the same parent.

+-

+-
+-
Sibling rank
+-

Index to uniquely identify objects of the same type which have the same parent, and is always in the range [0, parent_arity).

+-

+-
+-
Cousin objects
+-

Objects of the same type as the current object.

+-

+-
+-
Level
+-

Set of objects of the same type.

+-

+-
+-
OS or physical index
+-

The index that the operating system (OS) uses to identify the object. This may be completely arbitrary, or it may depend on the BIOS configuration.

+-

+-
+-
Depth
+-

Nesting level in the object tree, starting from the 0th object.

+-

+-
+-
Logical index
+-

Index to uniquely identify objects of the same type. It expresses proximity in a generic way. This index is always linear and in the range [0, num_objs_same_type_same_level). 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 processor
+-
+-
Processing unit
+-

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 SMT processor.

+-

+-
+-
+-

The following diagram can help to understand the vocabulary of the relationships by showing the example of a machine with two dual core sockets (with no hardware threads); thus, a topology with 4 levels. Each box with rounded corner corresponds to one hwloc_obj_t, containing the values of the different integer fields (depth, logical_index, etc.), and arrows show to which other hwloc_obj_t pointers point to (first_child, parent, etc.)

+-
+-diagram.png +-
+-

It should be noted that for PU objects, the logical index -- as computed linearly by hwloc -- is not the same as the OS index.

+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00002.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00002.html +--- hwloc-1.1/doc/doxygen-doc/html/a00002.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00002.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,52 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Command-line tools +- +- +- +- +- +- +-
+-
+-

Command-line tools

+-
+-
+-

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.

+-

+-lstopo

+-

lstopo (also known as hwloc-info and hwloc-ls) displays the hierarchical topology map of the current system. The output may be graphical or textual, and can also be exported to numerous file formats such as PDF, PNG, XML, and others.

+-

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).

+-

+-hwloc-bind

+-

hwloc-bind binds processes to specific hardware objects through a flexible syntax. A simple example is binding an executable to specific cores (or sockets or bitmaps or ...). The hwloc-bind(1) man page provides much more detail on what is possible.

+-

hwloc-bind can also be used to retrieve the current process' binding.

+-

+-hwloc-calc

+-

hwloc-calc is generally used to create bitmap strings to pass to hwloc-bind. Although hwloc-bind accepts many forms of object specification (i.e., bitmap strings are one of many forms that hwloc-bind understands), they can be useful, compact representations in shell scripts, for example.

+-

hwloc-calc generates bitmap strings from given hardware objects with the ability to aggregate them, intersect them, and more. hwloc-calc generally uses the same syntax than hwloc-bind, but multiple instances may be composed to generate complex combinations.

+-

Note that hwloc-calc can also generate lists of logical processors or NUMA nodes that are convenient to pass to some external tools such as taskset or numactl.

+-

+-hwloc-distrib

+-

hwloc-distrib generates a set of bitmap strings 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.

+-

+-hwloc-ps

+-

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.

+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00003.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00003.html +--- hwloc-1.1/doc/doxygen-doc/html/a00003.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00003.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,47 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Environment variables +- +- +- +- +- +- +-
+-
+-

Environment variables

+-
+-
+-

The behavior of the hwloc library and tools may be tuned thanks to the following environment variables.

+-
+-
HWLOC_XMLFILE=/path/to/file.xml
+-

enforces the discovery from the given XML file as if hwloc_topology_set_xml() 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.

+-

+-
+-
HWLOC_FSROOT=/path/to/linux/filesystem-root/
+-

switches to reading the topology from the specified Linux filesystem root instead of the main file-system root, as if hwloc_topology_set_fsroot() had been called. Not using the main file-system root causes hwloc_topology_is_thissystem() 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.

+-

+-
+-
HWLOC_THISSYSTEM=1
+-

enforces the return value of hwloc_topology_is_thissystem(). 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 an XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind.

+-

+-
+-
+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00004.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00004.html +--- hwloc-1.1/doc/doxygen-doc/html/a00004.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00004.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): CPU Binding and Memory Binding +- +- +- +- +- +- +-
+-
+-

CPU Binding and Memory Binding

+-
+-
+-

Some OSes 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, and changing the memory binding policy may change the CPU binding of the current thread. This is often not a problem for the application, so by default hwloc will make use of these functions when they provide better binding support.

+-

If the application does not want any CPU binding change when changing the memory policy, it needs to use the HWLOC_MEMBIND_NOCPUBIND flag to prevent hwloc from using OS functions which would change the CPU binding. Conversely, HWLOC_CPUBIND_NOMEMBIND can be passed to cpu binding function to prevent hwloc form using OS functions woudl change the memory binding policy. Of course, this will thus reduce hwloc's support for binding, so their use is discouraged.

+-

One can however avoid using these flags but still closely control both memory and CPU binding, by allocating memory and touching it, and then changing the CPU binding. The already-really-allocated memory will not be migrated, thus even if the memory binding policy gets changed by the CPU binding order, the effect will have been achieved. On binding and allocating further memory, the CPU binding should be performed again in case the memory binding altered the previously-selected CPU binding.

+-

Not all OSes support the notion of a current memory binding policy for the current process but those often still provide a way to allocate data on a given node set. Conversely, some OSes support the notion of a current memory binding policy, and do not permit to allocate data on a given node set without just changing the current policy and allocate the data. Hwloc provides functions that set the current memory binding policies (if supported) as well as functions which allocat memory bound to given node set. By default, it does not use the former to achieve the latter, so that users can use both on OSes where they are both supported, and get both effects at the same time. For convenience, hwloc however also provides the hwloc_alloc_membind_policy and hwloc_alloc_membind_policy_nodeset helpers which are allowed to change the current memory binding policy of the process, in order to achieve memory binding even if that means having to change the current memory binding policy.

+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00005.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00005.html +--- hwloc-1.1/doc/doxygen-doc/html/a00005.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00005.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,64 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Interoperability with other software +- +- +- +- +- +- +-
+-
+-

Interoperability with other software

+-
+-
+-

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.

+-

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.

+-
+-
Linux specific features
+-

hwloc/linux.h 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.

+-

+-
+-
Linux libnuma
+-

hwloc/linux-libnuma.h provides conversion helpers between hwloc CPU sets and libnuma-specific types, such as nodemasks and bitmasks. It helps you use libnuma memory-binding functions with hwloc CPU sets.

+-

+-
+-
Glibc
+-

hwloc/glibc-sched.h offers conversion routines between Glibc and hwloc CPU sets in order to use hwloc with functions such as sched_setaffinity().

+-

+-
+-
OpenFabrics Verbs
+-

hwloc/openfabrics-verbs.h helps interoperability with the OpenFabrics Verbs interface. For example, it can return a list of processors near an OpenFabrics device.

+-

+-
+-
Myrinet Express
+-

hwloc/myriexpress.h offers interoperability with the Myrinet Express interface. It can return the list of processors near a Myrinet board managed by the MX driver.

+-

+-
+-
NVIDIA CUDA
+-

hwloc/cuda.h and hwloc/cudart.h enable interoperability with NVIDIA CUDA Driver and Runtime interfaces. For instance, it may return the list of processors near NVIDIA GPUs.

+-

+-
+-
Taskset command-line tool
+-

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 --taskset option to manipulate taskset-specific strings.

+-

+-
+-
+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00006.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00006.html +--- hwloc-1.1/doc/doxygen-doc/html/a00006.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00006.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,52 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Thread safety +- +- +- +- +- +- +-
+-
+-

Thread safety

+-
+-
+-

Like most libraries that mainly fill data structures, hwloc is not thread safe but rather reentrant: all state is held in a hwloc_topology_t instance without mutex protection. That means, for example, that two threads can safely operate on and modify two different hwloc_topology_t instances, but they should not simultaneously invoke functions that modify the same instance. Similarly, one thread should not modify a hwloc_topology_t instance while another thread is reading or traversing it. However, two threads can safely read or traverse the same hwloc_topology_t instance concurrently.

+-

When running in multiprocessor environments, be aware that proper thread synchronization and/or memory coherency protection is needed to pass hwloc data (such as hwloc_topology_t 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.

+-

For reference, hwloc_topology_t modification operations include (but may not be limited to):

+-
+-
Creation and destruction
+-

hwloc_topology_init(), hwloc_topology_load(), hwloc_topology_destroy() (see Create and Destroy Topologies) 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.

+-

Also references to objects inside the topology are not valid anymore after these functions return.

+-

+-
+-
Runtime topology modifications
+-

hwloc_topology_insert_misc_object_by_* (see Tinker with topologies.) may modify the topology significantly by adding objects inside the tree, changing the topology depth, etc.

+-

Although references to former objects may still be valid after insertion, it is strongly advised to not rely on any such guarantee and always re-consult the topology to reacquire new instances of objects.

+-

+-
+-
Locating topologies
+-

hwloc_topology_ignore*, hwloc_topology_set* (see Configure Topology Detection) do not modify the topology directly, but they do modify internal structures describing the behavior of the next invocation of hwloc_topology_load(). Hence, all of these functions should not be used concurrently.

+-

Note that these functions do not modify the current topology until it is actually reloaded; it is possible to use them while other threads are only read the current topology.

+-

+-
+-
+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00007.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00007.html +--- hwloc-1.1/doc/doxygen-doc/html/a00007.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00007.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,95 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Embedding hwloc in other software +- +- +- +- +- +- +-
+-
+-

Embedding hwloc in other software

+-
+-
+-

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.

+-

When used in "embedded" mode, hwloc will:

+- +-

There are two ways to put hwloc into "embedded" mode. The first is directly from the configure command line:

+-
+-shell$ ./configure --enable-embedded-mode ...
+-

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 an m4 macro (see below).

+-

+-Using hwloc's M4 Embedding Capabilities

+-

Every project is different, and there are many different ways of integrating hwloc into yours. What follows is one example of how to do it.

+-

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.

+-

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).

+-

The following macros can then be used from your configure script (only HWLOC_SETUP_CORE must be invoked if using the m4 macros):

+- +-

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.

+-

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.

+-

NOTE: If the HWLOC_SET_SYMBOL_PREFIX macro is used, it must be invoked before HWLOC_SETUP_CORE.

+- +- +- +- +-

NOTE: 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.

+-

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.

+-

+-Example Embedding hwloc

+-

Here's an example of integrating with a larger project named sandbox that already uses Autoconf, Automake, and Libtool to build itself:

+-
+-# First, cd into the sandbox project source tree
+-shell$ cd sandbox
+-shell$ cp -r /somewhere/else/hwloc-<version> my-embedded-hwloc
+-shell$ edit Makefile.am
+-  1. Add "-Imy-embedded-hwloc/config" to ACLOCAL_AMFLAGS
+-  2. Add "my-embedded-hwloc" to SUBDIRS
+-  3. Add "$(HWLOC_EMBEDDED_LDADD)" and "$(HWLOC_EMBEDDED_LIBS)" to 
+-     sandbox's executable's LDADD line.  The former is the name of the 
+-     Libtool convenience library that hwloc will generate.  The latter 
+-     is any dependent support libraries that may be needed by 
+-     $(HWLOC_EMBEDDED_LDADD).
+-  4. Add "$(HWLOC_EMBEDDED_CFLAGS)" to AM_CFLAGS
+-  5. Add "$(HWLOC_EMBEDDED_CPPFLAGS)" to AM_CPPFLAGS
+-shell$ edit configure.ac
+-  1. Add "HWLOC_SET_SYMBOL_PREFIX(sandbox_hwloc_)" line
+-  2. Add "HWLOC_SETUP_CORE([my-embedded-hwloc], [happy=yes], [happy=no])" line
+-  3. Add error checking for happy=no case
+-shell$ edit sandbox.c
+-  1. Add #include <hwloc.h>
+-  2. Add calls to sandbox_hwloc_init() and other hwloc API functions
+-

Now you can bootstrap, configure, build, and run the sandbox as normal -- all calls to "sandbox_hwloc_*" will use the embedded hwloc rather than any system-provided copy of hwloc.

+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00008.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00008.html +--- hwloc-1.1/doc/doxygen-doc/html/a00008.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00008.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,55 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Switching from PLPA to hwloc +- +- +- +- +- +- +-
+-
+-

Switching from PLPA to hwloc

+-
+-
+-

Although PLPA and hwloc share some of the same ideas, their programming interfaces are quite different. After much debate, it was decided not to emulate the PLPA API with hwloc's API because hwloc's API is already far more rich than PLPA's.

+-

More specifically, exploiting modern computing architecture requires the flexible functionality provided by the hwloc API -- the PLPA API is too rigid in its definitions and practices to handle the evolving server hardware landscape (e.g., PLPA only understands cores and sockets; hwloc understands a much larger set of hardware objects).

+-

As such, even though it is fully possible to emulate the PLPA API with hwloc (e.g., only deal with sockets and cores), and while the documentation below describes how to do this, we encourage any existing PLPA application authors to actually re-think their application in terms of more than just sockets and cores. In short, we encourage you to use the full hwloc API to exploit all the hardware.

+-

+-Topology Context vs. Caching

+-

First, all hwloc functions take a topology parameter. This parameter serves as an internal storage for the result of the topology discovery. It replaces PLPA's caching abilities and even lets you manipulate multiple topologies as the same time, if needed.

+-

Thus, all programs should first run hwloc_topology_init() and hwloc_topology_destroy() as they did plpa_init() and plpa_finalize() in the past.

+-

+-Hierarchy vs. Core@Socket

+-

PLPA was designed to understand only cores and sockets. hwloc offers many more different types of objects (e.g., cores, sockets, hardware threads, NUMA nodes, and others) and stores them within a tree of resources.

+-

To emulate the PLPA model, it is possible to find sockets using functions such as hwloc_get_obj_by_type(). Iterating over sockets is also possible using hwloc_get_next_obj_by_type(). Then, finding a core within a socket may be done using hwloc_get_obj_inside_cpuset_by_type() or hwloc_get_next_obj_inside_cpuset_by_type().

+-

It is also possible to directly find an object "below" another object using hwloc_get_obj_below_by_type() (or hwloc_get_obj_below_array_by_type()).

+-

+-Logical vs. Physical/OS Indexes

+-

hwloc manipulates logical indexes, meaning indexes specified with regard to the ordering of objects in the hwloc-provided hierarchical tree. Physical or OS indexes may be entirely hidden if not strictly required. The reason for this is that physical/OS indexes may change with the OS or with the BIOS version. They may be non-consecutive, multiple objects may have the same physical/OS indexes, making their manipulation tricky and highly non-portable.

+-

Note that hwloc tries very hard to always present a hierarchical tree with the same logical ordering, regardless of physical or OS index ordering.

+-

It is still possible to retrieve physical/OS indexes through the os_index field of objects, but such practice should be avoided as much as possible for the reasons described above (except perhaps for prettyprinting / debugging purposes).

+-

HWLOC_OBJ_PU objects are supposed to have different physical/OS indexes since the OS uses them for binding. The os_index field of these objects provides the identifier that may be used for such binding, and hwloc_get_proc_obj_by_os_index() finds the object associated with a specific OS index.

+-

But as mentioned above, we discourage the use of these conversion methods for actual binding. Instead, hwloc offers its own binding model using the cpuset field of objects. These cpusets may be duplicated, modified, combined, etc. (see hwloc/bitmap.h for details) and then passed to hwloc_set_cpubind() for binding.

+-

+-Counting Specification

+-

PLPA offers a countspec parameter to specify whether counting all CPUs, only the online ones or only the offline ones. However, some operating systems do not expose the topology of offline CPUs (i.e., offline CPUs are not reported at all by the OS). Also, some processors may not be visible to the current application due to administrative restrictions. Finally, some processors let you shutdown a single hardware thread in a core, making some of the PLPA features irrelevant.

+-

hwloc stores in the hierarchical tree of objects all CPUs that have known topology information. It then provides the applications with several cpusets that contain the list of CPUs that are actually known, that have topology information, that are online, or that are available to the application. These cpusets may be retrieved with hwloc_topology_get_online_cpuset() and other similar functions to filter the object that are relevant or not.

+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00009.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00009.html +--- hwloc-1.1/doc/doxygen-doc/html/a00009.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00009.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,36 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Frequently Asked Questions +- +- +- +- +- +- +-
+-
+-

Frequently Asked Questions

+-
+-
+-

+-I do not want hwloc to rediscover my enormous machine topology everytime I rerun a process

+-

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.

+-

For this purpose, hwloc offers XML import/export features. It 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. 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 socket).

+-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00010.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00010.html +--- hwloc-1.1/doc/doxygen-doc/html/a00010.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00010.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,112 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference

+-
+-
+- +-

Cache-specific Object Attributes. +-More...

+- +-

#include <hwloc.h>

+- +- +- +- +- +- +- +- +-

+-Data Fields

uint64_t size
 Size of cache in bytes.
unsigned depth
 Depth of cache.
unsigned linesize
 Cache-line size in bytes.
+-

Detailed Description

+-

Cache-specific Object Attributes.

+-

Field Documentation

+- +-
+- +-
+- +-

Depth of cache.

+- +-
+-
+- +-
+- +-
+- +-

Cache-line size in bytes.

+- +-
+-
+- +-
+-
+- +- +- +- +-
uint64_t hwloc_obj_attr_u::hwloc_cache_attr_s::size
+-
+-
+- +-

Size of cache in bytes.

+- +-
+-
+-
The documentation for this struct was generated from the following file: +-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00011.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00011.html +--- hwloc-1.1/doc/doxygen-doc/html/a00011.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00011.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,78 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference

+-
+-
+- +-

Group-specific Object Attributes. +-More...

+- +-

#include <hwloc.h>

+- +- +- +- +-

+-Data Fields

unsigned depth
 Depth of group object.
+-

Detailed Description

+-

Group-specific Object Attributes.

+-

Field Documentation

+- +-
+- +-
+- +-

Depth of group object.

+- +-
+-
+-
The documentation for this struct was generated from the following file: +-
+- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00012.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00012.html +--- hwloc-1.1/doc/doxygen-doc/html/a00012.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00012.html 2010-12-31 23:48:22.503902179 +0100 +@@ -1,555 +1,836 @@ +- +- +- +- ++ ++ + Hardware Locality (hwloc): hwloc_obj Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_obj Struct Reference
++ ++ ++ ++ ++

hwloc_obj Struct Reference
+ +-[Topology Objects] +-

+-
+-
+- +-

Structure of a topology object. +-More...

++[Topology Objects] ++Structure of a topology object. ++More... ++

++#include <hwloc.h> ++

++ ++ ++ ++ + +-

#include <hwloc.h>

+-

Data Fields

hwloc_obj_type_t type
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +

+-Data Fields

hwloc_obj_type_t type
 Type of object.
unsigned os_index
 OS-provided physical index number.
char * name
 Object description if any.
struct hwloc_obj_memory_s memory
 Memory attributes.
union hwloc_obj_attr_uattr
 Object type-specific Attributes, may be NULL if no attribute value was found.
unsigned depth
 Vertical index in the hierarchy.
unsigned logical_index
 Horizontal index in the whole list of similar objects, could be a "cousin_rank" since it's the rank within the "cousin" list below.
signed os_level
 OS-provided physical level, -1 if unknown or meaningless.
struct hwloc_objnext_cousin
 Next object of same type.
struct hwloc_objprev_cousin
 Previous object of same type.
struct hwloc_objparent
 Parent, NULL if root (system object).
unsigned sibling_rank
 Index in parent's children[] array.
struct hwloc_objnext_sibling
 Next object below the same parent.
struct hwloc_objprev_sibling
 Previous object below the same parent.
unsigned arity
 Number of children.
struct hwloc_obj ** children
 Children, children[0 .. arity -1].
struct hwloc_objfirst_child
 First child.
struct hwloc_objlast_child
 Last child.
void * userdata
 Application-given private data pointer, initialized to NULL, use it as you wish.
hwloc_cpuset_t cpuset
 CPUs covered by this object.
hwloc_cpuset_t complete_cpuset
 The complete CPU set of logical processors of this object,.
hwloc_cpuset_t online_cpuset
 The CPU set of online logical processors.
hwloc_cpuset_t allowed_cpuset
 The CPU set of allowed logical processors.
hwloc_nodeset_t nodeset
 NUMA nodes covered by this object or containing this object.
hwloc_nodeset_t complete_nodeset
 The complete NUMA node set of this object,.
hwloc_nodeset_t allowed_nodeset
 The set of allowed NUMA memory nodes.
struct hwloc_obj_info_sinfos
 Array of stringified info type=name.
unsigned infos_count
 Size of infos array.
 Type of object.
unsigned os_index
 OS-provided physical index number.
char * name
 Object description if any.
hwloc_obj_memory_s memory
 Memory attributes.
hwloc_obj_attr_uattr
 Object type-specific Attributes, may be NULL if no attribute value was found.
unsigned depth
 Vertical index in the hierarchy.
unsigned logical_index
 Horizontal index in the whole list of similar objects, could be a "cousin_rank" since it's the rank within the "cousin" list below.
signed os_level
 OS-provided physical level, -1 if unknown or meaningless.
hwloc_objnext_cousin
 Next object of same type.
hwloc_objprev_cousin
 Previous object of same type.
hwloc_objparent
 Parent, NULL if root (system object).
unsigned sibling_rank
 Index in parent's children[] array.
hwloc_objnext_sibling
 Next object below the same parent.
hwloc_objprev_sibling
 Previous object below the same parent.
unsigned arity
 Number of children.
hwloc_obj ** children
 Children, children[0 .
hwloc_objfirst_child
 First child.
hwloc_objlast_child
 Last child.
void * userdata
 Application-given private data pointer, initialized to NULL, use it as you wish.
hwloc_cpuset_t cpuset
 CPUs covered by this object.
hwloc_cpuset_t complete_cpuset
 The complete CPU set of logical processors of this object,.
hwloc_cpuset_t online_cpuset
 The CPU set of online logical processors.
hwloc_cpuset_t allowed_cpuset
 The CPU set of allowed logical processors.
hwloc_nodeset_t nodeset
 NUMA nodes covered by this object or containing this object.
hwloc_nodeset_t complete_nodeset
 The complete NUMA node set of this object,.
hwloc_nodeset_t allowed_nodeset
 The set of allowed NUMA memory nodes.
hwloc_obj_info_sinfos
 Array of stringified info type=name.
unsigned infos_count
 Size of infos array.
+-


Detailed Description

+-

Structure of a topology object.

+-

Applications mustn't modify any field except userdata .

+-

Field Documentation

+- +-
+-
+- ++

Detailed Description

++Structure of a topology object. ++

++Applications mustn't modify any field except ::userdata . ++

++


Field Documentation

++

++

++ ++
++ + +- ++ + +
hwloc_cpuset_t hwloc_obj::allowed_cpusethwloc_cpuset_t hwloc_obj::allowed_cpuset
+- +-
+- +-

The CPU set of allowed logical processors.

+-

This includes the CPUs contained in this object which are allowed for binding, i.e. passing them to the hwloc binding functions should not return permission errors. This is usually restricted by administration rules. Some of them may however be offline so binding to them may still not be possible, see online_cpuset.

+-
Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++The CPU set of allowed logical processors. ++

++This includes the CPUs contained in this object which are allowed for binding, i.e. passing them to the hwloc binding functions should not return permission errors. This is usually restricted by administration rules. Some of them may however be offline so binding to them may still not be possible, see online_cpuset.

++

Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
++
++

++ ++ ++
++ + +- ++ + +
hwloc_nodeset_t hwloc_obj::allowed_nodesethwloc_nodeset_t hwloc_obj::allowed_nodeset
+- +-
+- +-

The set of allowed NUMA memory nodes.

+-

This includes the NUMA memory nodes contained in this object which are allowed for memory allocation, i.e. passing them to NUMA node-directed memory allocation should not return permission errors. This is usually restricted by administration rules.

+-

If there are no NUMA nodes in the machine, all the memory is close to this object, so allowed_nodeset is full.

+-
Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++The set of allowed NUMA memory nodes. ++

++This includes the NUMA memory nodes contained in this object which are allowed for memory allocation, i.e. passing them to NUMA node-directed memory allocation should not return permission errors. This is usually restricted by administration rules.

++If there are no NUMA nodes in the machine, all the memory is close to this object, so allowed_nodeset is full.

++

Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
++
++

++ ++ ++
++ + +- ++ + +
unsigned hwloc_obj::arityunsigned hwloc_obj::arity
+- +-
+- +-

Number of children.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Number of children. ++

++

++

++ ++ ++
++ + +- ++ + +
union hwloc_obj_attr_u* hwloc_obj::attrunion hwloc_obj_attr_u* hwloc_obj::attr
+- +-
+- +-

Object type-specific Attributes, may be NULL if no attribute value was found.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Object type-specific Attributes, may be NULL if no attribute value was found. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj** hwloc_obj::childrenstruct hwloc_obj** hwloc_obj::children
+- +-
+- +-

Children, children[0 .. arity -1].

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Children, children[0 . ++

++arity -1]

++

++ ++ ++
++ + +- ++ + +
hwloc_cpuset_t hwloc_obj::complete_cpusethwloc_cpuset_t hwloc_obj::complete_cpuset
+- +-
+- +-

The complete CPU set of logical processors of this object,.

+-

This includes not only the same as the cpuset field, but also the CPUs for which topology information is unknown or incomplete, and the CPUs that are ignored when the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM 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.

+-
Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++The complete CPU set of logical processors of this object,. ++

++This includes not only the same as the cpuset field, but also the CPUs for which topology information is unknown or incomplete, and the CPUs that are ignored when the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM 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.

++

Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
++
++

++ ++ ++
++ + +- ++ + +
hwloc_nodeset_t hwloc_obj::complete_nodesethwloc_nodeset_t hwloc_obj::complete_nodeset
+- +-
+- +-

The complete NUMA node set of this object,.

+-

This includes not only the same as the nodeset field, but also the NUMA nodes for which topology information is unknown or incomplete, and the nodes that are ignored when the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM flag is not set. Thus no corresponding 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.

+-

If there are no NUMA nodes in the machine, all the memory is close to this object, so complete_nodeset is full.

+-
Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++The complete NUMA node set of this object,. ++

++This includes not only the same as the nodeset field, but also the NUMA nodes for which topology information is unknown or incomplete, and the nodes that are ignored when the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM flag is not set. Thus no corresponding 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.

++If there are no NUMA nodes in the machine, all the memory is close to this object, so complete_nodeset is full.

++

Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
++
++

++ ++ ++
++ + +- ++ + +
hwloc_cpuset_t hwloc_obj::cpusethwloc_cpuset_t hwloc_obj::cpuset
+- +-
+- +-

CPUs covered by this object.

+-

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).

+-

If the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of these CPUs may be offline, or not allowed for binding, see online_cpuset and allowed_cpuset.

+-
Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++CPUs covered by this object. ++

++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).

++If the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of these CPUs may be offline, or not allowed for binding, see online_cpuset and allowed_cpuset.

++

Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
++
++

++ ++ ++
++ + +- ++ + +
unsigned hwloc_obj::depthunsigned hwloc_obj::depth
+- +-
+- +-

Vertical index in the hierarchy.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Vertical index in the hierarchy. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj* hwloc_obj::first_childstruct hwloc_obj* hwloc_obj::first_child
+- +-
+- +-

First child.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++First child. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj_info_s* hwloc_obj::infosstruct hwloc_obj_info_s* hwloc_obj::infos
+- +-
+- +-

Array of stringified info type=name.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Array of stringified info type=name. ++

++

++

++ ++ ++
++ + +- ++ + +
unsigned hwloc_obj::infos_countunsigned hwloc_obj::infos_count
+- +-
+- +-

Size of infos array.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Size of infos array. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj* hwloc_obj::last_childstruct hwloc_obj* hwloc_obj::last_child
+- +-
+- +-

Last child.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Last child. ++

++

++

++ ++ ++
++ + +- ++ + +
unsigned hwloc_obj::logical_indexunsigned hwloc_obj::logical_index
+- +-
+- +-

Horizontal index in the whole list of similar objects, could be a "cousin_rank" since it's the rank within the "cousin" list below.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Horizontal index in the whole list of similar objects, could be a "cousin_rank" since it's the rank within the "cousin" list below. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj_memory_s hwloc_obj::memorystruct hwloc_obj_memory_s hwloc_obj::memory
+- +-
+- +-

Memory attributes.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Memory attributes. ++

++

++

++ ++ ++
++ + +- ++ + +
char* hwloc_obj::namechar* hwloc_obj::name
+- +-
+- +-

Object description if any.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Object description if any. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj* hwloc_obj::next_cousinstruct hwloc_obj* hwloc_obj::next_cousin
+- +-
+- +-

Next object of same type.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Next object of same type. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj* hwloc_obj::next_siblingstruct hwloc_obj* hwloc_obj::next_sibling
+- +-
+- +-

Next object below the same parent.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Next object below the same parent. ++

++

++

++ ++ ++
++ + +- ++ + +
hwloc_nodeset_t hwloc_obj::nodesethwloc_nodeset_t hwloc_obj::nodeset
+- +-
+- +-

NUMA nodes covered by this object or containing this object.

+-

This is the set of NUMA nodes for which there are 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 NODE objects).

+-

In the end, these nodes are those that are close to the current object.

+-

If the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of these nodes may not be allowed for allocation, see allowed_nodeset.

+-

If there are no NUMA nodes in the machine, all the memory is close to this object, so nodeset is full.

+-
Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++NUMA nodes covered by this object or containing this object. ++

++This is the set of NUMA nodes for which there are 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 NODE objects).

++In the end, these nodes are those that are close to the current object.

++If the HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM configuration flag is set, some of these nodes may not be allowed for allocation, see allowed_nodeset.

++If there are no NUMA nodes in the machine, all the memory is close to this object, so nodeset is full.

++

Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
++
++

++ ++ ++
++ + +- ++ + +
hwloc_cpuset_t hwloc_obj::online_cpusethwloc_cpuset_t hwloc_obj::online_cpuset
+- +-
+- +-

The CPU set of online logical processors.

+-

This includes the CPUs contained in this object that are online, i.e. draw power and can execute threads. It may however not be allowed to bind to them due to administration rules, see allowed_cpuset.

+-
Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++The CPU set of online logical processors. ++

++This includes the CPUs contained in this object that are online, i.e. draw power and can execute threads. It may however not be allowed to bind to them due to administration rules, see allowed_cpuset.

++

Note:
Its value must not be changed, hwloc_bitmap_dup must be used instead.
++
++

++ ++ ++
++ + +- ++ + +
unsigned hwloc_obj::os_indexunsigned hwloc_obj::os_index
+- +-
+- +-

OS-provided physical index number.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++OS-provided physical index number. ++

++

++

++ ++ ++
++ + +- ++ + +
signed hwloc_obj::os_levelsigned hwloc_obj::os_level
+- +-
+- +-

OS-provided physical level, -1 if unknown or meaningless.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++OS-provided physical level, -1 if unknown or meaningless. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj* hwloc_obj::parentstruct hwloc_obj* hwloc_obj::parent
+- +-
+- +-

Parent, NULL if root (system object).

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Parent, NULL if root (system object). ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj* hwloc_obj::prev_cousinstruct hwloc_obj* hwloc_obj::prev_cousin
+- +-
+- +-

Previous object of same type.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Previous object of same type. ++

++

++

++ ++ ++
++ + +- ++ + +
struct hwloc_obj* hwloc_obj::prev_siblingstruct hwloc_obj* hwloc_obj::prev_sibling
+- +-
+- +-

Previous object below the same parent.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Previous object below the same parent. ++

++

++

++ ++ ++
++ + +- ++ + +
unsigned hwloc_obj::sibling_rankunsigned hwloc_obj::sibling_rank
+- +-
+- +-

Index in parent's children[] array.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Index in parent's children[] array. ++

++

++

++ ++ ++
++ + +- ++ + +
hwloc_obj_type_t hwloc_obj::typehwloc_obj_type_t hwloc_obj::type
+- +-
+- +-

Type of object.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Type of object. ++

++

++

++ ++ ++ ++ ++
++ + +- ++ + +
void* hwloc_obj::userdatavoid* hwloc_obj::userdata
+- +-
+- +-

Application-given private data pointer, initialized to NULL, use it as you wish.

+- +-
+- +-
The documentation for this struct was generated from the following file: +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Application-given private data pointer, initialized to NULL, use it as you wish. ++

++

++


The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00013.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00013.html +--- hwloc-1.1/doc/doxygen-doc/html/a00013.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00013.html 2010-12-31 23:48:22.413891165 +0100 +@@ -1,101 +1,86 @@ +- +- +- +- ++ ++ + Hardware Locality (hwloc): hwloc_obj_attr_u Union Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_obj_attr_u Union Reference
++ ++ ++ ++ ++

hwloc_obj_attr_u Union Reference
+ +-[Topology Objects] +-

+-
+-
+- +-

Object type-specific Attributes. +-More...

++[Topology Objects] ++Object type-specific Attributes. ++More... ++

++#include <hwloc.h> ++

++ ++ ++ ++ + +-

#include <hwloc.h>

+-

Data Fields

hwloc_obj_attr_u::hwloc_cache_attr_s cache
+- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ +

+-Data Structures

struct  hwloc_cache_attr_s
 Cache-specific Object Attributes. More...
struct  hwloc_group_attr_s
 Group-specific Object Attributes. More...

+-Data Fields

struct
+-hwloc_obj_attr_u::hwloc_cache_attr_s 
cache
 Cache-specific Object Attributes.
struct
+-hwloc_obj_attr_u::hwloc_group_attr_s 
group
 Group-specific Object Attributes.
 Cache-specific Object Attributes.
hwloc_obj_attr_u::hwloc_group_attr_s group
 Group-specific Object Attributes.
+-


Detailed Description

+-

Object type-specific Attributes.

+-

Field Documentation

+- +-
+-
+- ++

Detailed Description

++Object type-specific Attributes. ++

++


Field Documentation

++

++

++ ++ ++ ++
++ + +- ++ + +
struct hwloc_obj_attr_u::hwloc_cache_attr_s hwloc_obj_attr_u::cachestruct hwloc_obj_attr_u::hwloc_cache_attr_s hwloc_obj_attr_u::cache
+- +-
+- +-

Cache-specific Object Attributes.

++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Cache-specific Object Attributes. ++

++ ++ ++

++

++ ++ ++ ++ ++
++ + +- ++ + +
struct hwloc_obj_attr_u::hwloc_group_attr_s hwloc_obj_attr_u::groupstruct hwloc_obj_attr_u::hwloc_group_attr_s hwloc_obj_attr_u::group
+- +-
+- +-

Group-specific Object Attributes.

++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +-
The documentation for this union was generated from the following file: +- +-
++


The documentation for this union was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00014.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00014.html +--- hwloc-1.1/doc/doxygen-doc/html/a00014.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00014.html 2010-12-31 23:48:22.525904871 +0100 +@@ -1,92 +1,111 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_obj_info_s Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_obj_info_s Struct Reference
+- +-[Topology Objects] +-

+-
+-
+- +-

Object info. +-More...

+- +-

#include <hwloc.h>

+- +- +- +- +- +- +-

+-Data Fields

char * name
 Info name.
char * value
 Info value.
+-

Detailed Description

+-

Object info.

+-

Field Documentation

+- +-
+-
+- ++ ++ ++Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference ++ ++ ++ ++ ++

hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference

Cache-specific Object Attributes. ++More... ++

++#include <hwloc.h> ++

++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Data Fields

uint64_t size
 Size of cache in bytes.
unsigned depth
 Depth of cache.
unsigned linesize
 Cache-line size in bytes.
++

Detailed Description

++Cache-specific Object Attributes. ++

++


Field Documentation

++

++ ++ ++ ++ ++
++ + +- ++ + +
char* hwloc_obj_info_s::nameunsigned hwloc_obj_attr_u::hwloc_cache_attr_s::depth
+- +-
+- +-

Info name.

++
++ ++ ++ ++ ++ + +- +- +- +-
+-
+-
++   ++ + +- +- +- +-
+-
+- ++

++Depth of cache. ++

++ ++ ++

++

++ ++ ++ ++ ++
++ + +- ++ + +
char* hwloc_obj_info_s::valueunsigned hwloc_obj_attr_u::hwloc_cache_attr_s::linesize
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Info value.

++

++Cache-line size in bytes. ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
uint64_t hwloc_obj_attr_u::hwloc_cache_attr_s::size
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +-
The documentation for this struct was generated from the following file: +- +-
++


The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00015.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00015.html +--- hwloc-1.1/doc/doxygen-doc/html/a00015.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00015.html 2010-12-31 23:48:22.461897039 +0100 +@@ -1,96 +1,55 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_obj_memory_s::hwloc_obj_memory_page_type_s Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_obj_memory_s::hwloc_obj_memory_page_type_s Struct Reference

+-
+-
+- +-

Array of local memory page types, NULL if no local memory and page_types is 0. +-More...

++ ++ ++Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference ++ ++ ++ ++ ++

hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference

Group-specific Object Attributes. ++More... ++

++#include <hwloc.h> ++

++ ++ ++ ++ + +-

#include <hwloc.h>

+-

Data Fields

unsigned depth
+- +- +- +- +- ++ +

+-Data Fields

uint64_t size
 Size of pages.
uint64_t count
 Number of pages of this size.
 Depth of group object.
+-


Detailed Description

+-

Array of local memory page types, NULL if no local memory and page_types is 0.

+-

The array is sorted by increasing size fields. It contains page_types_len slots.

+-

Field Documentation

+- +-
+-
+- ++

Detailed Description

++Group-specific Object Attributes. ++

++


Field Documentation

++

++

++ ++ ++ ++
++ + +- ++ + +
uint64_t hwloc_obj_memory_s::hwloc_obj_memory_page_type_s::countunsigned hwloc_obj_attr_u::hwloc_group_attr_s::depth
+- +-
+- +-

Number of pages of this size.

+- +-
+- +- +-
+- +-
+- +-

Size of pages.

++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +-
The documentation for this struct was generated from the following file: +- +-
++
The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00016.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00016.html +--- hwloc-1.1/doc/doxygen-doc/html/a00016.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00016.html 2010-12-31 23:48:22.414891288 +0100 +@@ -1,133 +1,86 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_obj_memory_s Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_obj_memory_s Struct Reference
++ ++ ++Hardware Locality (hwloc): hwloc_obj_info_s Struct Reference ++ ++ ++ ++ ++

hwloc_obj_info_s Struct Reference
+ +-[Topology Objects] +-

+-
+-
+- +-

Object memory. +-More...

++[Topology Objects] ++Object info. ++More... ++

++#include <hwloc.h> ++

++ ++ ++ ++ + +-

#include <hwloc.h>

+-

Data Fields

char * name
+- +- +- +- +- +- +- +- +- +- +- +- +-

+-Data Structures

struct  hwloc_obj_memory_page_type_s
 Array of local memory page types, NULL if no local memory and page_types is 0. More...

+-Data Fields

uint64_t total_memory
 Total memory (in bytes) in this object and its children.
uint64_t local_memory
 Local memory (in bytes).
unsigned page_types_len
 Size of array page_types.
struct
+-hwloc_obj_memory_s::hwloc_obj_memory_page_type_s
page_types
 Array of local memory page types, NULL if no local memory and page_types is 0.
+-


Detailed Description

+-

Object memory.

+-

Field Documentation

+- +-
+-
+- +- +- +- +-
uint64_t hwloc_obj_memory_s::local_memory
+-
+-
+- +-

Local memory (in bytes).

+- +-
+-
+- +-
+- +-
+- +-

Array of local memory page types, NULL if no local memory and page_types is 0.

+-

The array is sorted by increasing size fields. It contains page_types_len slots.

++
 Info name.
char * value
++ ++
 Info value.
++


Detailed Description

++Object info. ++

++


Field Documentation

++

++ ++ ++
++ + +- ++ + +
unsigned hwloc_obj_memory_s::page_types_lenchar* hwloc_obj_info_s::name
+- +-
+- +-

Size of array page_types.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Info name. ++

++

++

++ ++ ++ ++ ++
++ + +- ++ + +
uint64_t hwloc_obj_memory_s::total_memorychar* hwloc_obj_info_s::value
+- +-
+- +-

Total memory (in bytes) in this object and its children.

+- +-
+- +-
The documentation for this struct was generated from the following file: +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Info value. ++

++

++


The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00017.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00017.html +--- hwloc-1.1/doc/doxygen-doc/html/a00017.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00017.html 2010-12-31 23:48:22.457896550 +0100 +@@ -1,178 +1,142 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_topology_cpubind_support Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_topology_cpubind_support Struct Reference
++ ++ ++Hardware Locality (hwloc): hwloc_obj_memory_s Struct Reference ++ ++ ++ ++ ++

hwloc_obj_memory_s Struct Reference
+ +-[Configure Topology Detection] +-

+-
+-
+- +-

Flags describing actual PU binding support for this topology. +-More...

+- +-

#include <hwloc.h>

+- +- +- +- +- +- +- +- +- +- +-

+-Data Fields

unsigned char set_thisproc_cpubind
unsigned char get_thisproc_cpubind
unsigned char set_proc_cpubind
unsigned char get_proc_cpubind
unsigned char set_thisthread_cpubind
unsigned char get_thisthread_cpubind
unsigned char set_thread_cpubind
unsigned char get_thread_cpubind
+-

Detailed Description

+-

Flags describing actual PU binding support for this topology.

+-

Field Documentation

+- +-
+-
+- +- +- +- +-
unsigned char hwloc_topology_cpubind_support::get_proc_cpubind
+-
+-
+-

Getting the binding of a whole given process is supported.

+- +-
+-
+- +-
+- +-
+-

Getting the binding of the whole current process is supported.

+- +-
+-
+- +-
+- +-
+-

Getting the binding of the current thread only is supported.

+- +-
+-
+- +-
+- +-
+-

Getting the binding of a given thread only is supported.

+- +-
+-
+- +-
+-
+- ++[Topology Objects] ++Object memory. ++More... ++

++#include <hwloc.h> ++

++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Data Fields

uint64_t total_memory
 Total memory (in bytes) in this object and its children.
uint64_t local_memory
 Local memory (in bytes).
unsigned page_types_len
 Size of array page_types.
hwloc_obj_memory_s::hwloc_obj_memory_page_type_spage_types
 Array of local memory page types, NULL if no local memory and page_types is 0.
++

Detailed Description

++Object memory. ++

++


Field Documentation

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_cpubind_support::set_proc_cpubinduint64_t hwloc_obj_memory_s::local_memory
+- +-
+-

Binding a whole given process is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Local memory (in bytes). ++

++

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_cpubind_support::set_thisproc_cpubindstruct hwloc_obj_memory_s::hwloc_obj_memory_page_type_s * hwloc_obj_memory_s::page_types
+- +-
+-

Binding the whole current process is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Array of local memory page types, NULL if no local memory and page_types is 0. ++

++The array is sorted by increasing size fields. It contains page_types_len slots.

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_cpubind_support::set_thisthread_cpubindunsigned hwloc_obj_memory_s::page_types_len
+- +-
+-

Binding the current thread only is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Size of array page_types. ++

++

++

++ ++ ++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_cpubind_support::set_thread_cpubinduint64_t hwloc_obj_memory_s::total_memory
+- +-
+-

Binding a given thread only is supported.

+- +-
+- +-
The documentation for this struct was generated from the following file: +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Total memory (in bytes) in this object and its children. ++

++

++


The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00018.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00018.html +--- hwloc-1.1/doc/doxygen-doc/html/a00018.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00018.html 2010-12-31 23:48:22.472898385 +0100 +@@ -1,75 +1,85 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_topology_discovery_support Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_topology_discovery_support Struct Reference
+- +-[Configure Topology Detection] +-

+-
+-
+- +-

Flags describing actual discovery support for this topology. +-More...

++ ++ ++Hardware Locality (hwloc): hwloc_obj_memory_s::hwloc_obj_memory_page_type_s Struct Reference ++ ++ ++ ++ ++

hwloc_obj_memory_s::hwloc_obj_memory_page_type_s Struct Reference

Array of local memory page types, NULL if no local memory and page_types is 0. ++More... ++

++#include <hwloc.h> ++

++ ++ ++ ++ + +-

#include <hwloc.h>

+-

Data Fields

uint64_t size
+- +- +- ++ ++ ++ ++ +

+-Data Fields

unsigned char pu
 Detecting the number of PU objects is supported.
 Size of pages.
uint64_t count
 Number of pages of this size.
+-


Detailed Description

+-

Flags describing actual discovery support for this topology.

+-

Field Documentation

+- +-
+-
+- ++

Detailed Description

++Array of local memory page types, NULL if no local memory and page_types is 0. ++

++The array is sorted by increasing size fields. It contains page_types_len slots. ++

++


Field Documentation

++

++

++ ++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_discovery_support::puuint64_t hwloc_obj_memory_s::hwloc_obj_memory_page_type_s::count
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Detecting the number of PU objects is supported.

++

++Number of pages of this size. ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
uint64_t hwloc_obj_memory_s::hwloc_obj_memory_page_type_s::size
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +-
The documentation for this struct was generated from the following file: +- +-
++


The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00019.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00019.html +--- hwloc-1.1/doc/doxygen-doc/html/a00019.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00019.html 2010-12-31 23:48:22.497901444 +0100 +@@ -1,283 +1,230 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_topology_membind_support Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_topology_membind_support Struct Reference
++ ++ ++Hardware Locality (hwloc): hwloc_topology_cpubind_support Struct Reference ++ ++ ++ ++ ++

hwloc_topology_cpubind_support Struct Reference
+ +-[Configure Topology Detection] +-

+-
+-
+- +-

Flags describing actual memory binding support for this topology. +-More...

+- +-

#include <hwloc.h>

+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-Data Fields

unsigned char set_thisproc_membind
unsigned char get_thisproc_membind
unsigned char set_proc_membind
unsigned char get_proc_membind
unsigned char set_thisthread_membind
unsigned char get_thisthread_membind
unsigned char set_area_membind
unsigned char get_area_membind
unsigned char alloc_membind
unsigned char firsttouch_membind
unsigned char bind_membind
unsigned char interleave_membind
unsigned char replicate_membind
unsigned char nexttouch_membind
unsigned char migrate_membind
+-

Detailed Description

+-

Flags describing actual memory binding support for this topology.

+-

Field Documentation

+- +-
+-
+- +- +- +- +-
unsigned char hwloc_topology_membind_support::alloc_membind
+-
+-
+-

Allocating a bound memory area is supported.

+- +-
+-
+- +-
+-
+- +- +- +- +-
unsigned char hwloc_topology_membind_support::bind_membind
+-
+-
+-

Bind policy is supported.

+- +-
+-
+- +-
+- +-
+-

First-touch policy is supported.

+- +-
+-
+- +-
+-
+- +- +- +- +-
unsigned char hwloc_topology_membind_support::get_area_membind
+-
+-
+-

Getting the binding of a given memory area is supported.

+- +-
+-
+- +-
+-
+- +- +- +- +-
unsigned char hwloc_topology_membind_support::get_proc_membind
+-
+-
+-

Getting the binding of a whole given process is supported.

+- +-
+-
+- +-
+- +-
+-

Getting the binding of the whole current process is supported.

+- +-
+-
+- +-
+- +-
+-

Getting the binding of the current thread only is supported.

+- +-
+-
+- +-
+-
+- ++[Configure Topology Detection] ++Flags describing actual PU binding support for this topology. ++More... ++

++#include <hwloc.h> ++

++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Data Fields

unsigned char set_thisproc_cpubind
unsigned char get_thisproc_cpubind
unsigned char set_proc_cpubind
unsigned char get_proc_cpubind
unsigned char set_thisthread_cpubind
unsigned char get_thisthread_cpubind
unsigned char set_thread_cpubind
unsigned char get_thread_cpubind
++

Detailed Description

++Flags describing actual PU binding support for this topology. ++

++


Field Documentation

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_membind_support::interleave_membindunsigned char hwloc_topology_cpubind_support::get_proc_cpubind
+- +-
+-

Interleave policy is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Getting the binding of a whole given process is supported.

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_membind_support::migrate_membindunsigned char hwloc_topology_cpubind_support::get_thisproc_cpubind
+- +-
+-

Migration flags is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Getting the binding of the whole current process is supported.

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_membind_support::nexttouch_membindunsigned char hwloc_topology_cpubind_support::get_thisthread_cpubind
+- +-
+-

Next-touch migration policy is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Getting the binding of the current thread only is supported.

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_membind_support::replicate_membindunsigned char hwloc_topology_cpubind_support::get_thread_cpubind
+- +-
+-

Replication policy is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Getting the binding of a given thread only is supported.

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_membind_support::set_area_membindunsigned char hwloc_topology_cpubind_support::set_proc_cpubind
+- +-
+-

Binding a given memory area is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Binding a whole given process is supported.

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_membind_support::set_proc_membindunsigned char hwloc_topology_cpubind_support::set_thisproc_cpubind
+- +-
+-

Binding a whole given process is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Binding the whole current process is supported.

++

++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_membind_support::set_thisproc_membindunsigned char hwloc_topology_cpubind_support::set_thisthread_cpubind
+- +-
+-

Binding the whole current process is supported.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Binding the current thread only is supported.

++

++ ++ ++ ++ ++
++ + +- ++ + +
unsigned char hwloc_topology_membind_support::set_thisthread_membindunsigned char hwloc_topology_cpubind_support::set_thread_cpubind
+- +-
+-

Binding the current thread only is supported.

+- +-
+- +-
The documentation for this struct was generated from the following file: +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Binding a given thread only is supported.

++


The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00020.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00020.html +--- hwloc-1.1/doc/doxygen-doc/html/a00020.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00020.html 2010-12-31 23:48:22.579911480 +0100 +@@ -1,104 +1,58 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc_topology_support Struct Reference +- +- +- +- +- +- +-
+- +-
+-

hwloc_topology_support Struct Reference
++ ++ ++Hardware Locality (hwloc): hwloc_topology_discovery_support Struct Reference ++ ++ ++ ++ ++

hwloc_topology_discovery_support Struct Reference
+ +-[Configure Topology Detection] +-

+-
+-
+- +-

Set of flags describing actual support for this topology. +-More...

++[Configure Topology Detection] ++Flags describing actual discovery support for this topology. ++More... ++

++#include <hwloc.h> ++

++ ++ ++ ++ + +-

#include <hwloc.h>

+-

Data Fields

unsigned char pu
+- +- +- +- ++ +

+-Data Fields

struct
+-hwloc_topology_discovery_support
discovery
struct
+-hwloc_topology_cpubind_support
cpubind
struct
+-hwloc_topology_membind_support
membind
 Detecting the number of PU objects is supported.
+-


Detailed Description

+-

Set of flags describing actual support for this topology.

+-

This is retrieved with hwloc_topology_get_support() and will be valid until the topology object is destroyed. Note: the values are correct only after discovery.

+-

Field Documentation

+- +-
+-
+- ++

Detailed Description

++Flags describing actual discovery support for this topology. ++

++


Field Documentation

++

++

++ ++ ++ ++
++ + +- ++ + +
struct hwloc_topology_cpubind_support* hwloc_topology_support::cpubindunsigned char hwloc_topology_discovery_support::pu
+- +-
+- +-
+- +- +- +- +-
++ ++ ++ ++ ++ ++
++   ++ + +- +- +-
The documentation for this struct was generated from the following file: +- +-
++
The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00021.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00021.html +--- hwloc-1.1/doc/doxygen-doc/html/a00021.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00021.html 2010-12-31 23:48:22.575910989 +0100 +@@ -0,0 +1,405 @@ ++ ++ ++Hardware Locality (hwloc): hwloc_topology_membind_support Struct Reference ++ ++ ++ ++ ++

hwloc_topology_membind_support Struct Reference
++ ++[Configure Topology Detection] ++

Flags describing actual memory binding support for this topology. ++More... ++

++#include <hwloc.h> ++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Data Fields

unsigned char set_thisproc_membind
unsigned char get_thisproc_membind
unsigned char set_proc_membind
unsigned char get_proc_membind
unsigned char set_thisthread_membind
unsigned char get_thisthread_membind
unsigned char set_area_membind
unsigned char get_area_membind
unsigned char alloc_membind
unsigned char firsttouch_membind
unsigned char bind_membind
unsigned char interleave_membind
unsigned char replicate_membind
unsigned char nexttouch_membind
unsigned char migrate_membind
++


Detailed Description

++Flags describing actual memory binding support for this topology. ++

++


Field Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::alloc_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Allocating a bound memory area is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::bind_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Bind policy is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::firsttouch_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++First-touch policy is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::get_area_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Getting the binding of a given memory area is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::get_proc_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Getting the binding of a whole given process is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::get_thisproc_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Getting the binding of the whole current process is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::get_thisthread_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Getting the binding of the current thread only is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::interleave_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Interleave policy is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::migrate_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Migration flags is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::nexttouch_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Next-touch migration policy is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::replicate_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Replication policy is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::set_area_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Binding a given memory area is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::set_proc_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Binding a whole given process is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::set_thisproc_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Binding the whole current process is supported.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
unsigned char hwloc_topology_membind_support::set_thisthread_membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Binding the current thread only is supported.

++


The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00021_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00021_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00021_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00021_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,196 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): bitmap.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00022.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00022.html +--- hwloc-1.1/doc/doxygen-doc/html/a00022.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00022.html 2010-12-31 23:48:22.571910501 +0100 +@@ -0,0 +1,107 @@ ++ ++ ++Hardware Locality (hwloc): hwloc_topology_support Struct Reference ++ ++ ++ ++ ++

hwloc_topology_support Struct Reference
++ ++[Configure Topology Detection] ++

Set of flags describing actual support for this topology. ++More... ++

++#include <hwloc.h> ++

++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Data Fields

hwloc_topology_discovery_supportdiscovery
hwloc_topology_cpubind_supportcpubind
hwloc_topology_membind_supportmembind
++


Detailed Description

++Set of flags describing actual support for this topology. ++

++This is retrieved with hwloc_topology_get_support() and will be valid until the topology object is destroyed. Note: the values are correct only after discovery. ++

++


Field Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
struct hwloc_topology_cpubind_support* hwloc_topology_support::cpubind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
struct hwloc_topology_discovery_support* hwloc_topology_support::discovery
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
struct hwloc_topology_membind_support* hwloc_topology_support::membind
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++

++


The documentation for this struct was generated from the following file: ++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00022_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00022_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00022_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00022_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,103 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): cuda.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00023.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00023.html +--- hwloc-1.1/doc/doxygen-doc/html/a00023.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00023.html 2010-12-31 23:48:22.570910379 +0100 +@@ -0,0 +1,164 @@ ++ ++ ++Hardware Locality (hwloc): bitmap.h File Reference ++ ++ ++ ++ ++

bitmap.h File Reference

The bitmap API, for use in hwloc itself. More... ++

++#include <hwloc/config.h>
++#include <assert.h>
++ ++

++Go to the source code of this file. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Defines

#define hwloc_bitmap_foreach_begin(id, bitmap)
 Loop macro iterating on bitmap bitmap.
#define hwloc_bitmap_foreach_end()
 End of loop. Needs a terminating ';'.

Typedefs

typedef hwloc_bitmap_s * hwloc_bitmap_t
 Set of bits represented as an opaque pointer to an internal bitmap.
typedef const struct hwloc_bitmap_s * hwloc_const_bitmap_t

Functions

hwloc_bitmap_t hwloc_bitmap_alloc (void)
 Allocate a new empty bitmap.
hwloc_bitmap_t hwloc_bitmap_alloc_full (void)
 Allocate a new full bitmap.
void hwloc_bitmap_free (hwloc_bitmap_t bitmap)
 Free bitmap bitmap.
hwloc_bitmap_t hwloc_bitmap_dup (hwloc_const_bitmap_t bitmap)
 Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.
void hwloc_bitmap_copy (hwloc_bitmap_t dst, hwloc_const_bitmap_t src)
 Copy the contents of bitmap src into the already allocated bitmap dst.
int hwloc_bitmap_snprintf (char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)
 Stringify a bitmap.
int hwloc_bitmap_asprintf (char **strp, hwloc_const_bitmap_t bitmap)
 Stringify a bitmap into a newly allocated string.
int hwloc_bitmap_sscanf (hwloc_bitmap_t bitmap, const char *restrict string)
 Parse a bitmap string and stores it in bitmap bitmap.
int hwloc_bitmap_taskset_snprintf (char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)
 Stringify a bitmap in the taskset-specific format.
int hwloc_bitmap_taskset_asprintf (char **strp, hwloc_const_bitmap_t bitmap)
 Stringify a bitmap into a newly allocated taskset-specific string.
int hwloc_bitmap_taskset_sscanf (hwloc_bitmap_t bitmap, const char *restrict string)
 Parse a taskset-specific bitmap string and stores it in bitmap bitmap.
void hwloc_bitmap_zero (hwloc_bitmap_t bitmap)
 Empty the bitmap bitmap.
void hwloc_bitmap_fill (hwloc_bitmap_t bitmap)
 Fill bitmap bitmap with all possible indexes (even if those objects don't exist or are otherwise unavailable).
void hwloc_bitmap_only (hwloc_bitmap_t bitmap, unsigned id)
 Empty the bitmap bitmap and add bit id.
void hwloc_bitmap_allbut (hwloc_bitmap_t bitmap, unsigned id)
 Fill the bitmap and clear the index id.
void hwloc_bitmap_from_ulong (hwloc_bitmap_t bitmap, unsigned long mask)
 Setup bitmap bitmap from unsigned long mask.
void hwloc_bitmap_from_ith_ulong (hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)
 Setup bitmap bitmap from unsigned long mask used as i -th subset.
void hwloc_bitmap_set (hwloc_bitmap_t bitmap, unsigned id)
 Add index id in bitmap bitmap.
void hwloc_bitmap_set_range (hwloc_bitmap_t bitmap, unsigned begin, unsigned end)
 Add indexess from begin to end in bitmap bitmap.
void hwloc_bitmap_set_ith_ulong (hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)
 Replace i -th subset of bitmap bitmap with unsigned long mask.
void hwloc_bitmap_clr (hwloc_bitmap_t bitmap, unsigned id)
 Remove index id from bitmap bitmap.
void hwloc_bitmap_clr_range (hwloc_bitmap_t bitmap, unsigned begin, unsigned end)
 Remove index from begin to end in bitmap bitmap.
void hwloc_bitmap_singlify (hwloc_bitmap_t bitmap)
 Keep a single index among those set in bitmap bitmap.
unsigned long hwloc_bitmap_to_ulong (hwloc_const_bitmap_t bitmap)
 Convert the beginning part of bitmap bitmap into unsigned long mask.
unsigned long hwloc_bitmap_to_ith_ulong (hwloc_const_bitmap_t bitmap, unsigned i)
 Convert the i -th subset of bitmap bitmap into unsigned long mask.
int hwloc_bitmap_isset (hwloc_const_bitmap_t bitmap, unsigned id)
 Test whether index id is part of bitmap bitmap.
int hwloc_bitmap_iszero (hwloc_const_bitmap_t bitmap)
 Test whether bitmap bitmap is empty.
int hwloc_bitmap_isfull (hwloc_const_bitmap_t bitmap)
 Test whether bitmap bitmap is completely full.
int hwloc_bitmap_first (hwloc_const_bitmap_t bitmap)
 Compute the first index (least significant bit) in bitmap bitmap.
int hwloc_bitmap_next (hwloc_const_bitmap_t bitmap, unsigned prev)
 Compute the next index in bitmap bitmap which is after index prev.
int hwloc_bitmap_last (hwloc_const_bitmap_t bitmap)
 Compute the last index (most significant bit) in bitmap bitmap.
int hwloc_bitmap_weight (hwloc_const_bitmap_t bitmap)
 Compute the "weight" of bitmap bitmap (i.e., number of indexes that are in the bitmap).
void hwloc_bitmap_or (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.
void hwloc_bitmap_and (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.
void hwloc_bitmap_andnot (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 And bitmap bitmap1 and the negation of bitmap2 and store the result in bitmap res.
void hwloc_bitmap_xor (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 Xor bitmaps bitmap1 and bitmap2 and store the result in bitmap res.
void hwloc_bitmap_not (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap)
 Negate bitmap bitmap and store the result in bitmap res.
int hwloc_bitmap_intersects (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 Test whether bitmaps bitmap1 and bitmap2 intersects.
int hwloc_bitmap_isincluded (hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)
 Test whether bitmap sub_bitmap is part of bitmap super_bitmap.
int hwloc_bitmap_isequal (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 Test whether bitmap bitmap1 is equal to bitmap bitmap2.
int hwloc_bitmap_compare_first (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 Compare bitmaps bitmap1 and bitmap2 using their lowest index.
int hwloc_bitmap_compare (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 Compare bitmaps bitmap1 and bitmap2 using their highest index.
++


Detailed Description

++The bitmap API, for use in hwloc itself. ++

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00023_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00023_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00023_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00023_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,97 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): cudart.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00024.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00024.html +--- hwloc-1.1/doc/doxygen-doc/html/a00024.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00024.html 2010-12-31 23:48:22.575910989 +0100 +@@ -0,0 +1,30 @@ ++ ++ ++Hardware Locality (hwloc): cuda.h File Reference ++ ++ ++ ++ ++

cuda.h File Reference

Macros to help interaction between hwloc and the CUDA Driver API. More... ++

++#include <hwloc.h>
++#include <hwloc/config.h>
++#include <hwloc/linux.h>
++#include <cuda.h>
++ ++

++Go to the source code of this file. ++ ++ ++ ++ ++ ++

Functions

inline int hwloc_cuda_get_device_cpuset (hwloc_topology_t topology , CUdevice cudevice, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to device cudevice.
++


Detailed Description

++Macros to help interaction between hwloc and the CUDA Driver API. ++

++Applications that use both hwloc and the CUDA Driver API may want to include this file so as to get topology information for CUDA devices.


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00024_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00024_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00024_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00024_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,123 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): glibc-sched.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00025.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00025.html +--- hwloc-1.1/doc/doxygen-doc/html/a00025.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00025.html 2010-12-31 23:48:22.505902423 +0100 +@@ -0,0 +1,30 @@ ++ ++ ++Hardware Locality (hwloc): cudart.h File Reference ++ ++ ++ ++ ++

cudart.h File Reference

Macros to help interaction between hwloc and the CUDA Runtime API. More... ++

++#include <hwloc.h>
++#include <hwloc/config.h>
++#include <hwloc/linux.h>
++#include <cuda_runtime_api.h>
++ ++

++Go to the source code of this file. ++ ++ ++ ++ ++ ++

Functions

inline int hwloc_cudart_get_device_cpuset (hwloc_topology_t topology , int device, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to device cudevice.
++


Detailed Description

++Macros to help interaction between hwloc and the CUDA Runtime API. ++

++Applications that use both hwloc and the CUDA Runtime API may want to include this file so as to get topology information for CUDA devices.


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00025_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00025_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00025_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00025_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,626 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): helper.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00026.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00026.html +--- hwloc-1.1/doc/doxygen-doc/html/a00026.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00026.html 2010-12-31 23:48:22.422892267 +0100 +@@ -0,0 +1,32 @@ ++ ++ ++Hardware Locality (hwloc): glibc-sched.h File Reference ++ ++ ++ ++ ++

glibc-sched.h File Reference

Macros to help interaction between hwloc and glibc scheduling routines. More... ++

++#include <hwloc.h>
++#include <hwloc/helper.h>
++#include <assert.h>
++ ++

++Go to the source code of this file. ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

inline int hwloc_cpuset_to_glibc_sched_affinity (hwloc_topology_t topology , hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize)
 Convert hwloc CPU set toposet into glibc sched affinity CPU set schedset.
inline int hwloc_cpuset_from_glibc_sched_affinity (hwloc_topology_t topology , hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize)
 Convert glibc sched affinity CPU set schedset into hwloc CPU set.
++


Detailed Description

++Macros to help interaction between hwloc and glibc scheduling routines. ++

++Applications that use both hwloc and glibc scheduling routines such as sched_getaffinity may want to include this file so as to ease conversion between their respective types.


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00027.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00027.html +--- hwloc-1.1/doc/doxygen-doc/html/a00027.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00027.html 2010-12-31 23:48:22.510903035 +0100 +@@ -0,0 +1,169 @@ ++ ++ ++Hardware Locality (hwloc): helper.h File Reference ++ ++ ++ ++ ++

helper.h File Reference

High-level hwloc traversal helpers. More... ++

++#include <stdlib.h>
++#include <errno.h>
++ ++

++Go to the source code of this file. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

inline int  hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the depth of objects of type type or below.
inline int  hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the depth of objects of type type or above.
inline hwloc_obj_t
++ 
hwloc_get_root_obj (hwloc_topology_t topology)
 Returns the top-object of the topology-tree.
inline hwloc_obj_t
++ 
hwloc_get_ancestor_obj_by_depth (hwloc_topology_t topology , unsigned depth, hwloc_obj_t obj)
 Returns the ancestor object of obj at depth depth.
inline hwloc_obj_t
++ 
hwloc_get_ancestor_obj_by_type (hwloc_topology_t topology , hwloc_obj_type_t type, hwloc_obj_t obj)
 Returns the ancestor object of obj with type type.
inline hwloc_obj_t hwloc_get_next_obj_by_depth (hwloc_topology_t topology, unsigned depth, hwloc_obj_t prev)
 Returns the next object at depth depth.
inline hwloc_obj_t hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)
 Returns the next object of type type.
inline hwloc_obj_t
++ 
hwloc_get_pu_obj_by_os_index (hwloc_topology_t topology, unsigned os_index)
 Returns the object of type HWLOC_OBJ_PU with os_index.
inline hwloc_obj_t hwloc_get_next_child (hwloc_topology_t topology , hwloc_obj_t parent, hwloc_obj_t prev)
 Return the next child.
inline hwloc_obj_t
++ 
hwloc_get_common_ancestor_obj (hwloc_topology_t topology , hwloc_obj_t obj1, hwloc_obj_t obj2)
 Returns the common parent object to objects lvl1 and lvl2.
inline int  hwloc_obj_is_in_subtree (hwloc_topology_t topology , hwloc_obj_t obj, hwloc_obj_t subtree_root)
 Returns true if _obj_ is inside the subtree beginning with subtree_root.
inline hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 Get the first largest object included in the given cpuset set.
int hwloc_get_largest_objs_inside_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t *restrict objs, int max)
 Get the set of largest objects covering exactly a given cpuset set.
inline hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, hwloc_obj_t prev)
 Return the next object at depth depth included in CPU set set.
inline hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)
 Return the next object of type type included in CPU set set.
inline hwloc_obj_t
++ 
hwloc_get_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, unsigned idx)
 Return the index -th object at depth depth included in CPU set set.
inline hwloc_obj_t
++ 
hwloc_get_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, unsigned idx)
 Return the idx -th object of type type included in CPU set set.
inline unsigned  hwloc_get_nbobjs_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth)
 Return the number of objects at depth depth included in CPU set set.
inline int  hwloc_get_nbobjs_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type)
 Return the number of objects of type type included in CPU set set.
inline hwloc_obj_t
++ 
hwloc_get_child_covering_cpuset (hwloc_topology_t topology , hwloc_const_cpuset_t set, hwloc_obj_t parent)
 Get the child covering at least CPU set set.
inline hwloc_obj_t
++ 
hwloc_get_obj_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 Get the lowest object covering at least CPU set set.
inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, hwloc_obj_t prev)
 Iterate through same-depth objects covering at least CPU set set.
inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)
 Iterate through same-type objects covering at least CPU set set.
inline hwloc_obj_t
++ 
hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 Get the first cache covering a cpuset set.
inline hwloc_obj_t
++ 
hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology , hwloc_obj_t obj)
 Get the first cache shared between an object and somebody else.
unsigned hwloc_get_closest_objs (hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *restrict objs, unsigned max)
 Do a depth-first traversal of the topology to find and sort.
inline hwloc_obj_t
++ 
hwloc_get_obj_below_by_type (hwloc_topology_t topology, hwloc_obj_type_t type1, unsigned idx1, hwloc_obj_type_t type2, unsigned idx2)
 Find an object below another object, both specified by types and indexes.
inline hwloc_obj_t
++ 
hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)
 Find an object below a chain of objects specified by types and indexes.
inline void hwloc_distributev (hwloc_topology_t topology, hwloc_obj_t *root, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
 Distribute n items over the topology under root.
inline void hwloc_distribute (hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
inline void * hwloc_alloc_membind_policy_nodeset (hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on the given nodeset nodeset.
inline void * hwloc_alloc_membind_policy (hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on the memory nodes near given cpuset cpuset.
inline hwloc_const_cpuset_t
++ 
hwloc_topology_get_complete_cpuset (hwloc_topology_t topology)
inline hwloc_const_cpuset_t
++ 
hwloc_topology_get_topology_cpuset (hwloc_topology_t topology)
inline hwloc_const_cpuset_t
++ 
hwloc_topology_get_online_cpuset (hwloc_topology_t topology)
 Get online CPU set.
inline hwloc_const_cpuset_t
++ 
hwloc_topology_get_allowed_cpuset (hwloc_topology_t topology)
 Get allowed CPU set.
inline hwloc_const_nodeset_t
++ 
hwloc_topology_get_complete_nodeset (hwloc_topology_t topology)
inline hwloc_const_nodeset_t
++ 
hwloc_topology_get_topology_nodeset (hwloc_topology_t topology)
inline hwloc_const_nodeset_t
++ 
hwloc_topology_get_allowed_nodeset (hwloc_topology_t topology)
 Get allowed node set.
inline void hwloc_cpuset_to_nodeset (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_nodeset_t nodeset)
 Convert a CPU set into a NUMA node set and handle non-NUMA cases.
inline void hwloc_cpuset_to_nodeset_strict (struct hwloc_topology *topology, hwloc_const_cpuset_t cpuset, hwloc_nodeset_t nodeset)
 Convert a CPU set into a NUMA node set without handling non-NUMA cases.
inline void hwloc_cpuset_from_nodeset (hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_const_nodeset_t nodeset)
 Convert a NUMA node set into a CPU set and handle non-NUMA cases.
inline void hwloc_cpuset_from_nodeset_strict (struct hwloc_topology *topology, hwloc_cpuset_t cpuset, hwloc_const_nodeset_t nodeset)
 Convert a NUMA node set into a CPU set without handling non-NUMA cases.
++


Detailed Description

++High-level hwloc traversal helpers. ++

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00027_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00027_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00027_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00027_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,400 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): hwloc.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00028.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00028.html +--- hwloc-1.1/doc/doxygen-doc/html/a00028.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00028.html 2010-12-31 23:48:22.446895203 +0100 +@@ -0,0 +1,15 @@ ++ ++ ++Hardware Locality (hwloc): hwloc.doxy File Reference ++ ++ ++ ++ ++

hwloc.doxy File Reference

++ ++
++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00028_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00028_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00028_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00028_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,383 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): linux-libnuma.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00029.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00029.html +--- hwloc-1.1/doc/doxygen-doc/html/a00029.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00029.html 2010-12-31 23:48:22.445895081 +0100 +@@ -0,0 +1,318 @@ ++ ++ ++Hardware Locality (hwloc): hwloc.h File Reference ++ ++ ++ ++ ++

hwloc.h File Reference

The hwloc API. More... ++

++#include <hwloc/config.h>
++#include <sys/types.h>
++#include <stdio.h>
++#include <string.h>
++#include <limits.h>
++#include <hwloc/rename.h>
++#include <hwloc/bitmap.h>
++#include <hwloc/cpuset.h>
++#include <hwloc/helper.h>
++ ++

++Go to the source code of this file. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Data Structures

struct  hwloc_obj_memory_s
 Object memory. More...
struct  hwloc_obj_memory_s::hwloc_obj_memory_page_type_s
 Array of local memory page types, NULL if no local memory and page_types is 0. More...
struct  hwloc_obj
 Structure of a topology object. More...
union  hwloc_obj_attr_u
 Object type-specific Attributes. More...
struct  hwloc_obj_attr_u::hwloc_cache_attr_s
 Cache-specific Object Attributes. More...
struct  hwloc_obj_attr_u::hwloc_group_attr_s
 Group-specific Object Attributes. More...
struct  hwloc_obj_info_s
 Object info. More...
struct  hwloc_topology_discovery_support
 Flags describing actual discovery support for this topology. More...
struct  hwloc_topology_cpubind_support
 Flags describing actual PU binding support for this topology. More...
struct  hwloc_topology_membind_support
 Flags describing actual memory binding support for this topology. More...
struct  hwloc_topology_support
 Set of flags describing actual support for this topology. More...

Defines

#define HWLOC_API_VERSION   0x00010100
 Indicate at build time which hwloc API version is being used.

Typedefs

typedef hwloc_topology * hwloc_topology_t
 Topology context.
typedef hwloc_bitmap_t hwloc_cpuset_t
 A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.
typedef hwloc_const_bitmap_t hwloc_const_cpuset_t
 A non-modifiable hwloc_cpuset_t.
typedef hwloc_bitmap_t hwloc_nodeset_t
 A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.
typedef hwloc_const_bitmap_t hwloc_const_nodeset_t
 A non-modifiable hwloc_nodeset_t.
typedef hwloc_objhwloc_obj_t
 Convenience typedef; a pointer to a struct hwloc_obj.

Enumerations

enum  hwloc_obj_type_t {
++  HWLOC_OBJ_SYSTEM, ++HWLOC_OBJ_MACHINE, ++HWLOC_OBJ_NODE, ++HWLOC_OBJ_SOCKET, ++
++  HWLOC_OBJ_CACHE, ++HWLOC_OBJ_CORE, ++HWLOC_OBJ_PU, ++HWLOC_OBJ_GROUP, ++
++  HWLOC_OBJ_MISC ++
++ }
 Type of topology object. More...
enum  hwloc_compare_types_e { HWLOC_TYPE_UNORDERED ++ }
enum  hwloc_topology_flags_e { HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM, ++HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM ++ }
 Flags to be set onto a topology context before load. More...
enum  hwloc_get_type_depth_e { HWLOC_TYPE_DEPTH_UNKNOWN, ++HWLOC_TYPE_DEPTH_MULTIPLE ++ }
enum  hwloc_cpubind_flags_t { HWLOC_CPUBIND_PROCESS, ++HWLOC_CPUBIND_THREAD, ++HWLOC_CPUBIND_STRICT, ++HWLOC_CPUBIND_NOMEMBIND ++ }
 Process/Thread binding flags. More...
enum  hwloc_membind_policy_t {
++  HWLOC_MEMBIND_DEFAULT, ++HWLOC_MEMBIND_FIRSTTOUCH, ++HWLOC_MEMBIND_BIND, ++HWLOC_MEMBIND_INTERLEAVE, ++
++  HWLOC_MEMBIND_REPLICATE, ++HWLOC_MEMBIND_NEXTTOUCH ++
++ }
 Memory binding policy. More...
enum  hwloc_membind_flags_t {
++  HWLOC_MEMBIND_PROCESS, ++HWLOC_MEMBIND_THREAD, ++HWLOC_MEMBIND_STRICT, ++HWLOC_MEMBIND_MIGRATE, ++
++  HWLOC_MEMBIND_NOCPUBIND ++
++ }
 Memory binding flags. More...

Functions

int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2)
 Compare the depth of two object types.
int hwloc_topology_init (hwloc_topology_t *topologyp)
 Allocate a topology context.
int hwloc_topology_load (hwloc_topology_t topology)
 Build the actual topology.
void hwloc_topology_destroy (hwloc_topology_t topology)
 Terminate and free a topology context.
void hwloc_topology_check (hwloc_topology_t topology)
 Run internal checks on a topology structure.
int hwloc_topology_ignore_type (hwloc_topology_t topology, hwloc_obj_type_t type)
 Ignore an object type.
int hwloc_topology_ignore_type_keep_structure (hwloc_topology_t topology, hwloc_obj_type_t type)
 Ignore an object type if it does not bring any structure.
int hwloc_topology_ignore_all_keep_structure (hwloc_topology_t topology)
 Ignore all objects that do not bring any structure.
int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags)
 Set OR'ed flags to non-yet-loaded topology.
int hwloc_topology_set_fsroot (hwloc_topology_t restrict topology, const char *restrict fsroot_path)
 Change the file-system root path when building the topology from sysfs/procfs.
int hwloc_topology_set_pid (hwloc_topology_t restrict topology, hwloc_pid_t pid)
 Change which pid the topology is viewed from.
int hwloc_topology_set_synthetic (hwloc_topology_t restrict topology, const char *restrict description)
 Enable synthetic topology.
int hwloc_topology_set_xml (hwloc_topology_t restrict topology, const char *restrict xmlpath)
 Enable XML-file based topology.
int hwloc_topology_set_xmlbuffer (hwloc_topology_t restrict topology, const char *restrict buffer, int size)
 Enable XML based topology using a memory buffer instead of a file.
const struct
++hwloc_topology_support
hwloc_topology_get_support (hwloc_topology_t restrict topology)
 Retrieve the topology support.
void hwloc_topology_export_xml (hwloc_topology_t topology, const char *xmlpath)
 Export the topology into an XML file.
void hwloc_topology_export_xmlbuffer (hwloc_topology_t topology, char **xmlbuffer, int *buflen)
 Export the topology into a newly-allocated XML memory buffer.
hwloc_obj_t hwloc_topology_insert_misc_object_by_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, const char *name)
 Add a MISC object to the topology.
hwloc_obj_t hwloc_topology_insert_misc_object_by_parent (hwloc_topology_t topology, hwloc_obj_t parent, const char *name)
 Add a MISC object to the topology.
unsigned hwloc_topology_get_depth (hwloc_topology_t restrict topology)
 Get the depth of the hierachical tree of objects.
int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the depth of objects of type type.
hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth)
 Returns the type of objects at depth depth.
unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, unsigned depth)
 Returns the width of level at depth depth.
inline int  hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the width of level type type.
int hwloc_topology_is_thissystem (hwloc_topology_t restrict topology)
 Does the topology context come from this system?
hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, unsigned depth, unsigned idx)
 Returns the topology object at index index from depth depth.
inline hwloc_obj_t
++ 
hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)
 Returns the topology object at index index with type type.
const char * hwloc_obj_type_string (hwloc_obj_type_t type)
 Return a stringified topology object type.
hwloc_obj_type_t hwloc_obj_type_of_string (const char *string)
 Return an object type from the string.
int hwloc_obj_type_snprintf (char *restrict string, size_t size, hwloc_obj_t obj, int verbose)
 Stringify the type of a given topology object into a human-readable form.
int hwloc_obj_attr_snprintf (char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)
 Stringify the attributes of a given topology object into a human-readable form.
int hwloc_obj_snprintf (char *restrict string, size_t size, hwloc_topology_t topology, hwloc_obj_t obj, const char *restrict indexprefix, int verbose)
 Stringify a given topology object into a human-readable form.
int hwloc_obj_cpuset_snprintf (char *restrict str, size_t size, size_t nobj, const hwloc_obj_t *restrict objs)
 Stringify the cpuset containing a set of objects.
inline char * hwloc_obj_get_info_by_name (hwloc_obj_t obj, const char *name)
 Search the given key name in object infos and return the corresponding value.
int hwloc_set_cpubind (hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)
 Bind current process or thread on cpus given in bitmap set.
int hwloc_get_cpubind (hwloc_topology_t topology, hwloc_cpuset_t set, int flags)
 Get current process or thread binding.
int hwloc_set_proc_cpubind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags)
 Bind a process pid on cpus given in bitmap set.
int hwloc_get_proc_cpubind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)
 Get the current binding of process pid.
int hwloc_set_thread_cpubind (hwloc_topology_t topology, hwloc_thread_t tid, hwloc_const_cpuset_t set, int flags)
 Bind a thread tid on cpus given in bitmap set.
int hwloc_get_thread_cpubind (hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int flags)
 Get the current binding of thread tid.
int hwloc_set_membind_nodeset (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind current process memory on the given nodeset nodeset.
int hwloc_set_membind (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind current process memory on memory nodes near the given cpuset cpuset.
int hwloc_get_membind_nodeset (hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in nodeset nodeset.
int hwloc_get_membind (hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in cpuset cpuset.
int hwloc_set_proc_membind_nodeset (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind given process memory on the given nodeset nodeset.
int hwloc_set_proc_membind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind given process memory on memory nodes near the given cpuset cpuset.
int hwloc_get_proc_membind_nodeset (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in nodeset nodeset.
int hwloc_get_proc_membind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in cpuset cpuset.
int hwloc_set_area_membind_nodeset (hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind some memory range on the given nodeset nodeset.
int hwloc_set_area_membind (hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind some memory range on memory nodes near the given cpuset cpuset.
int hwloc_get_area_membind_nodeset (hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get some memory range memory binding in nodeset nodeset.
int hwloc_get_area_membind (hwloc_topology_t topology, const void *addr, size_t len, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get some memory range memory binding in cpuset cpuset.
void * hwloc_alloc (hwloc_topology_t topology, size_t len)
 Allocate some memory.
void * hwloc_alloc_membind_nodeset (hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on the given nodeset nodeset.
void * hwloc_alloc_membind (hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on memory nodes near the given cpuset cpuset.
int hwloc_free (hwloc_topology_t topology, void *addr, size_t len)
 Free some memory allocated by hwloc_alloc() or hwloc_alloc_membind().
++


Detailed Description

++The hwloc API. ++

++See hwloc/bitmap.h for bitmap specific macros. See hwloc/helper.h for high-level topology traversal helpers.


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00029_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00029_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00029_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00029_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,68 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): linux.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00030.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00030.html +--- hwloc-1.1/doc/doxygen-doc/html/a00030.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00030.html 2010-12-31 23:48:22.494901078 +0100 +@@ -0,0 +1,63 @@ ++ ++ ++Hardware Locality (hwloc): linux-libnuma.h File Reference ++ ++ ++ ++ ++

linux-libnuma.h File Reference

Macros to help interaction between hwloc and Linux libnuma. More... ++

++#include <hwloc.h>
++#include <numa.h>
++ ++

++Go to the source code of this file. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

inline int hwloc_cpuset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode)
 Convert hwloc CPU set cpuset into the array of unsigned long mask.
inline int hwloc_nodeset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode)
 Convert hwloc NUMA node set nodeset into the array of unsigned long mask.
inline int hwloc_cpuset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode)
 Convert the array of unsigned long mask into hwloc CPU set.
inline int hwloc_nodeset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode)
 Convert the array of unsigned long mask into hwloc NUMA node set.
inline struct bitmask
++* 
hwloc_cpuset_to_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)
 Convert hwloc CPU set cpuset into the returned libnuma bitmask.
inline struct bitmask
++* 
hwloc_nodeset_to_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)
 Convert hwloc NUMA node set nodeset into the returned libnuma bitmask.
inline int hwloc_cpuset_from_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const struct bitmask *bitmask)
 Convert libnuma bitmask bitmask into hwloc CPU set cpuset.
inline int hwloc_nodeset_from_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const struct bitmask *bitmask)
 Convert libnuma bitmask bitmask into hwloc NUMA node set nodeset.
inline int hwloc_cpuset_to_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, nodemask_t *nodemask)
 Convert hwloc CPU set cpuset into libnuma nodemask nodemask.
inline int hwloc_nodeset_to_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, nodemask_t *nodemask)
 Convert hwloc NUMA node set nodeset into libnuma nodemask nodemask.
inline int hwloc_cpuset_from_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const nodemask_t *nodemask)
 Convert libnuma nodemask nodemask into hwloc CPU set cpuset.
inline int hwloc_nodeset_from_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const nodemask_t *nodemask)
 Convert libnuma nodemask nodemask into hwloc NUMA node set nodeset.
++


Detailed Description

++Macros to help interaction between hwloc and Linux libnuma. ++

++Applications that use both Linux libnuma and hwloc may want to include this file so as to ease conversion between their respective types.


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00030_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00030_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00030_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00030_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,116 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): myriexpress.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00031.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00031.html +--- hwloc-1.1/doc/doxygen-doc/html/a00031.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00031.html 2010-12-31 23:48:22.504902301 +0100 +@@ -0,0 +1,34 @@ ++ ++ ++Hardware Locality (hwloc): linux.h File Reference ++ ++ ++ ++ ++

linux.h File Reference

Macros to help interaction between hwloc and Linux. More... ++

++#include <hwloc.h>
++#include <stdio.h>
++ ++

++Go to the source code of this file. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

int hwloc_linux_parse_cpumap_file (FILE *file, hwloc_cpuset_t set)
 Convert a linux kernel cpumap file file into hwloc CPU set.
int hwloc_linux_set_tid_cpubind (hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set)
 Bind a thread tid on cpus given in cpuset set.
int hwloc_linux_get_tid_cpubind (hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set)
 Get the current binding of thread tid.
++


Detailed Description

++Macros to help interaction between hwloc and Linux. ++

++Applications that use hwloc on Linux may want to include this file if using some low-level Linux features.


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00031_source.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00031_source.html +--- hwloc-1.1/doc/doxygen-doc/html/a00031_source.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00031_source.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,93 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): openfabrics-verbs.h Source File +- +- +- +- +- +- +- +- +- +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00032.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00032.html +--- hwloc-1.1/doc/doxygen-doc/html/a00032.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00032.html 2010-12-31 23:48:22.433893614 +0100 +@@ -1,56 +1,33 @@ +- +- +- +- +-Hardware Locality (hwloc): API version +- +- +- +- +- +- +-
+- +-
+-

API version

+-
+-
+- +- +- +- +-

+-Defines

#define HWLOC_API_VERSION   0x00010100
 Indicate at build time which hwloc API version is being used.
+-

Define Documentation

+- +-
+-
+- +- +- +- +-
#define HWLOC_API_VERSION   0x00010100
+-
+-
++ ++ ++Hardware Locality (hwloc): myriexpress.h File Reference ++ ++ ++ ++ ++

myriexpress.h File Reference

Macros to help interaction between hwloc and Myrinet Express. More... ++

++#include <hwloc.h>
++#include <hwloc/config.h>
++#include <hwloc/linux.h>
++#include <myriexpress.h>
++ ++

++Go to the source code of this file. ++ ++ ++ + +-

Indicate at build time which hwloc API version is being used.

++ ++ + +- +- +- +- ++

Functions

inline int hwloc_mx_board_get_device_cpuset (hwloc_topology_t topology, unsigned id, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close the MX board id.
inline int hwloc_mx_endpoint_get_device_cpuset (hwloc_topology_t topology, mx_endpoint_t endpoint, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to endpoint endpoint.
++


Detailed Description

++Macros to help interaction between hwloc and Myrinet Express. ++

++Applications that use both hwloc and Myrinet Express verbs may want to include this file so as to get topology information for Myrinet hardware.


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1
+ + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00033.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00033.html +--- hwloc-1.1/doc/doxygen-doc/html/a00033.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00033.html 2010-12-31 23:48:22.501901935 +0100 +@@ -1,57 +1,30 @@ +- +- +- +- +-Hardware Locality (hwloc): Topology context +- +- +- +- +- +- +-
+- +-
+-

Topology context

+-
+-
+- +- +- +- +-

+-Typedefs

typedef struct hwloc_topology * hwloc_topology_t
 Topology context.
+-

Typedef Documentation

+- +-
+-
+- +- +- +- +-
typedef struct hwloc_topology* hwloc_topology_t
+-
+-
++ ++ ++Hardware Locality (hwloc): openfabrics-verbs.h File Reference ++ ++ ++ ++ ++

openfabrics-verbs.h File Reference

Macros to help interaction between hwloc and OpenFabrics verbs. More... ++

++#include <hwloc.h>
++#include <hwloc/config.h>
++#include <hwloc/linux.h>
++#include <infiniband/verbs.h>
+ +-

Topology context.

+-

To be initialized with hwloc_topology_init() and built with hwloc_topology_load().

++

++Go to the source code of this file. ++ ++ ++ + +- +- +- +- ++

Functions

inline int hwloc_ibv_get_device_cpuset (hwloc_topology_t topology , struct ibv_device *ibdev, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to device ibdev.
++


Detailed Description

++Macros to help interaction between hwloc and OpenFabrics verbs. ++

++Applications that use both hwloc and OpenFabrics verbs may want to include this file so as to get topology information for OpenFabrics hardware.


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1
+ + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00034.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00034.html +--- hwloc-1.1/doc/doxygen-doc/html/a00034.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00034.html 2010-12-31 23:48:22.582911846 +0100 +@@ -1,111 +1,45 @@ +- +- +- +- +-Hardware Locality (hwloc): Object sets +- +- +- +- +- +- +-
+- +-
+-

Object sets

+-
+-
+- +- +- +- +- +- +- +- +- +- +-

+-Typedefs

typedef hwloc_bitmap_t hwloc_cpuset_t
 A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.
typedef hwloc_const_bitmap_t hwloc_const_cpuset_t
 A non-modifiable hwloc_cpuset_t.
typedef hwloc_bitmap_t hwloc_nodeset_t
 A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.
typedef hwloc_const_bitmap_t hwloc_const_nodeset_t
 A non-modifiable hwloc_nodeset_t.
+-

Typedef Documentation

+- +-
+-
+- +- +- +- +-
typedef hwloc_const_bitmap_t hwloc_const_cpuset_t
+-
+-
+- +-

A non-modifiable hwloc_cpuset_t.

+- +-
+-
+- +-
+-
+- +- +- +- +-
typedef hwloc_const_bitmap_t hwloc_const_nodeset_t
+-
+-
+- +-

A non-modifiable hwloc_nodeset_t.

++ ++ ++Hardware Locality (hwloc): API version ++ ++ ++ ++ ++

API version

++ ++ ++ + +- +- +- +-
+-
+-

Defines

#define HWLOC_API_VERSION   0x00010100
+- +- +- +-
typedef hwloc_bitmap_t hwloc_cpuset_t
+-
+-
+- +-

A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.

+-

It may be consulted and modified with the bitmap API as any hwloc_bitmap_t (see hwloc/bitmap.h).

+- +-
+-
+- +-
+-
+- ++ ++
 Indicate at build time which hwloc API version is being used.
++

Define Documentation

++

++ ++ ++ ++ ++
++ + +- ++ + +
typedef hwloc_bitmap_t hwloc_nodeset_t#define HWLOC_API_VERSION   0x00010100
+- +-
+- +-

A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.

+-

It may be consulted and modified with the bitmap API as any hwloc_bitmap_t (see hwloc/bitmap.h).

+-

When binding memory on a system without any NUMA node (when the whole memory is considered as a single memory bank), the nodeset may be either empty (no memory selected) or full (whole system memory selected).

+-

See also Conversion between cpuset and nodeset.

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Indicate at build time which hwloc API version is being used. ++

++

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00035.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00035.html +--- hwloc-1.1/doc/doxygen-doc/html/a00035.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00035.html 2010-12-31 23:48:22.550907931 +0100 +@@ -1,165 +1,45 @@ +- +- +- +- +-Hardware Locality (hwloc): Topology Object Types +- +- +- +- +- +- +-
+- +-
+-

Topology Object Types

+-
+-
+- +- +- +- +- +- +- +- ++ ++ ++Hardware Locality (hwloc): Topology context ++ ++ ++ ++ ++

Topology context

+-Enumerations

enum  hwloc_obj_type_t {
+-  HWLOC_OBJ_SYSTEM, +-HWLOC_OBJ_MACHINE, +-HWLOC_OBJ_NODE, +-HWLOC_OBJ_SOCKET, +-
+-  HWLOC_OBJ_CACHE, +-HWLOC_OBJ_CORE, +-HWLOC_OBJ_PU, +-HWLOC_OBJ_GROUP, +-
+-  HWLOC_OBJ_MISC +-
+- }
 

Type of topology object.

+- More...
enum  hwloc_compare_types_e { HWLOC_TYPE_UNORDERED +- }

+-Functions

HWLOC_DECLSPEC int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2) __hwloc_attribute_const
 Compare the depth of two object types.
++ ++ ++ ++ ++ +

Typedefs

typedef hwloc_topology * hwloc_topology_t
 Topology context.
+-

Enumeration Type Documentation

+- +-
+-
+- ++

Typedef Documentation

++

++

++ ++
++ + +- ++ + +
enum hwloc_compare_types_etypedef struct hwloc_topology* hwloc_topology_t
+- +-
+-
Enumerator:
+- ++ ++ +
HWLOC_TYPE_UNORDERED  +-

Value returned by hwloc_compare_types when types can not be compared.

+-
+-
+-
+- +-
+- +- +-
+-
+- +- +- +- +-
enum hwloc_obj_type_t
+-
+-
++ ++ ++ ++ ++ + +- +- +- +-
+-
+-
++   ++ + +-

Type of topology object.

+-
Note:
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 hwloc_compare_types() instead.
+-
Enumerator:
+- +- +- +- +- +- +- +- +- ++

++Topology context. ++

++To be initialized with hwloc_topology_init() and built with hwloc_topology_load(). ++ +

HWLOC_OBJ_SYSTEM  +-

Whole system (may be a cluster of machines). The whole system that is accessible to hwloc. That may comprise several machines in SSI systems like Kerrighed.

+-
HWLOC_OBJ_MACHINE  +-

Machine. The typical root object type. A set of processors and memory with cache coherency.

+-
HWLOC_OBJ_NODE  +-

NUMA node. A set of processors around memory which the processors can directly access.

+-
HWLOC_OBJ_SOCKET  +-

Socket, physical package, or chip. In the physical meaning, i.e. that you can add or remove physically.

+-
HWLOC_OBJ_CACHE  +-

Data cache. Can be L1, L2, L3, ...

+-
HWLOC_OBJ_CORE  +-

Core. A computation unit (may be shared by several logical processors).

+-
HWLOC_OBJ_PU  +-

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).

+-

Objects of this kind are always reported and can thus be used as fallback when others are not.

+-
HWLOC_OBJ_GROUP  +-

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 OSes expose their arbitrary processors aggregation this way. And hwloc may insert such objects to group NUMA nodes according to their distances.

+-

These objects are ignored when they do not bring any structure.

+-
HWLOC_OBJ_MISC  +-

Miscellaneous objects. Objects without particular meaning, that can e.g. be added by the application for its own use.

+-
+-
+-
+- +- +- +-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_compare_types (hwloc_obj_type_t  type1,
hwloc_obj_type_t  type2 
) const
+-
+-
+- +-

Compare the depth of two object types.

+-

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 type1 objects usually include type2 objects, are the same as type2 objects, or are included in type2 objects. If the types can not be compared (because neither is usually contained in the other), HWLOC_TYPE_UNORDERED is returned. Object types containing CPUs can always be compared (usually, a system contains machines which contain nodes which contain sockets which contain caches, which contain cores, which contain processors).

+-
Note:
HWLOC_OBJ_PU will always be the deepest.
+-
+-This does not mean that the actual topology will respect that order: e.g. as of today cores may also contain caches, and sockets may also contain nodes. This is thus just to be seen as a fallback comparison method.
+- +-
+-
+- +- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00036.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00036.html +--- hwloc-1.1/doc/doxygen-doc/html/a00036.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00036.html 2010-12-31 23:48:22.554908420 +0100 +@@ -1,67 +1,131 @@ +- +- +- +- +-Hardware Locality (hwloc): Topology Objects +- +- +- +- +- +- +-
+- +-
+-

Topology Objects

+-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-Data Structures

struct  hwloc_obj_memory_s
 Object memory. More...
struct  hwloc_obj
 Structure of a topology object. More...
union  hwloc_obj_attr_u
 Object type-specific Attributes. More...
struct  hwloc_obj_info_s
 Object info. More...

+-Typedefs

typedef struct hwloc_objhwloc_obj_t
 Convenience typedef; a pointer to a struct hwloc_obj.
+-

Typedef Documentation

+- +-
+-
+- ++ ++ ++Hardware Locality (hwloc): Object sets ++ ++ ++ ++ ++

Object sets

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Typedefs

typedef hwloc_bitmap_t hwloc_cpuset_t
 A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.
typedef hwloc_const_bitmap_t hwloc_const_cpuset_t
 A non-modifiable hwloc_cpuset_t.
typedef hwloc_bitmap_t hwloc_nodeset_t
 A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.
typedef hwloc_const_bitmap_t hwloc_const_nodeset_t
 A non-modifiable hwloc_nodeset_t.
++

Typedef Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
typedef hwloc_const_bitmap_t hwloc_const_cpuset_t
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++A non-modifiable hwloc_cpuset_t. ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
typedef hwloc_const_bitmap_t hwloc_const_nodeset_t
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++A non-modifiable hwloc_nodeset_t. ++

++

++

++ ++ ++ ++ ++
++ + +- ++ + +
typedef struct hwloc_obj* hwloc_obj_ttypedef hwloc_bitmap_t hwloc_cpuset_t
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Convenience typedef; a pointer to a struct hwloc_obj.

++

++A CPU set is a bitmap whose bits are set according to CPU physical OS indexes. ++

++It may be consulted and modified with the bitmap API as any hwloc_bitmap_t (see hwloc/bitmap.h).

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++
typedef hwloc_bitmap_t hwloc_nodeset_t
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00037.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00037.html +--- hwloc-1.1/doc/doxygen-doc/html/a00037.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00037.html 2010-12-31 23:48:22.473898507 +0100 +@@ -1,155 +1,180 @@ +- +- +- +- +-Hardware Locality (hwloc): Create and Destroy Topologies +- +- +- +- +- +- +-
+- +-
+-

Create and Destroy Topologies

+-
+-
+- +- +- +- +- +- +- +- +- +- +-

+-Functions

HWLOC_DECLSPEC int hwloc_topology_init (hwloc_topology_t *topologyp)
 Allocate a topology context.
HWLOC_DECLSPEC int hwloc_topology_load (hwloc_topology_t topology)
 Build the actual topology.
HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t topology)
 Terminate and free a topology context.
HWLOC_DECLSPEC void hwloc_topology_check (hwloc_topology_t topology)
 Run internal checks on a topology structure.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_topology_check (hwloc_topology_t  topology ) 
+-
+-
++ ++ ++Hardware Locality (hwloc): Topology Object Types ++ ++ ++ ++ ++

Topology Object Types

++ ++ ++ ++ ++ ++ + +-

Run internal checks on a topology structure.

+-
Parameters:
+-

Enumerations

enum  hwloc_obj_type_t {
++  HWLOC_OBJ_SYSTEM, ++HWLOC_OBJ_MACHINE, ++HWLOC_OBJ_NODE, ++HWLOC_OBJ_SOCKET, ++
++  HWLOC_OBJ_CACHE, ++HWLOC_OBJ_CORE, ++HWLOC_OBJ_PU, ++HWLOC_OBJ_GROUP, ++
++  HWLOC_OBJ_MISC ++
++ }
 Type of topology object. More...
enum  hwloc_compare_types_e { HWLOC_TYPE_UNORDERED ++ }
+- +-
topology is the topology to be checked
+- +- ++

Functions

int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2)
++ ++
 Compare the depth of two object types.
++

Enumeration Type Documentation

++

++ ++ ++ ++ ++
++ + +- +- +- +- +- +- ++ + +
HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t  topology ) enum hwloc_compare_types_e
+- +-
+- +-

Terminate and free a topology context.

+-
Parameters:
+- +- +-
topology is the topology to be freed
+-
++
++ ++ ++ ++
++   ++ ++ ++

++

Enumeration values:
++ ++ ++
HWLOC_TYPE_UNORDERED  ++Value returned by hwloc_compare_types when types can not be compared.
+
+- +- +- +- +-
+-
+- ++ ++ ++
++

++ ++ ++ ++ ++
++ + +- +- +- +- +- +- ++ + +
HWLOC_DECLSPEC int hwloc_topology_init (hwloc_topology_t topologyp ) enum hwloc_obj_type_t
+- +-
+- +-

Allocate a topology context.

+-
Parameters:
+- +- +-
[out] topologyp is assigned a pointer to the new allocated context.
+-
++
++ ++ ++ ++ ++ + +-

Export the topology into a newly-allocated XML memory buffer.

+-

xmlbuffer is allocated by the callee and should be freed with xmlFree later in the caller.

+-

This memory buffer may be loaded later through hwloc_topology_set_xmlbuffer().

+- +- +- +- +-
+-
+-
++   ++ ++ ++

++Type of topology object. ++

++

Note:
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 hwloc_compare_types() instead.
++
Enumeration values:
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
HWLOC_OBJ_SYSTEM  ++Whole system (may be a cluster of machines). ++

++The whole system that is accessible to hwloc. That may comprise several machines in SSI systems like Kerrighed.

HWLOC_OBJ_MACHINE  ++Machine. ++

++The typical root object type. A set of processors and memory with cache coherency.

HWLOC_OBJ_NODE  ++NUMA node. ++

++A set of processors around memory which the processors can directly access.

HWLOC_OBJ_SOCKET  ++Socket, physical package, or chip. ++

++In the physical meaning, i.e. that you can add or remove physically.

HWLOC_OBJ_CACHE  ++Data cache. ++

++Can be L1, L2, L3, ...

HWLOC_OBJ_CORE  ++Core. ++

++A computation unit (may be shared by several logical processors).

HWLOC_OBJ_PU  ++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).

++Objects of this kind are always reported and can thus be used as fallback when others are not.

HWLOC_OBJ_GROUP  ++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 OSes expose their arbitrary processors aggregation this way. And hwloc may insert such objects to group NUMA nodes according to their distances.

++These objects are ignored when they do not bring any structure.

HWLOC_OBJ_MISC  ++Miscellaneous objects. ++

++Objects without particular meaning, that can e.g. be added by the application for its own use.

+
+-
Returns:
0 on success, -1 on error.
+- +- +- +- +-
+-
+- ++ ++ ++
++

Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ + +
int hwloc_compare_types hwloc_obj_type_t  type1,
hwloc_obj_type_t  type2
HWLOC_DECLSPEC int hwloc_topology_load (hwloc_topology_t  topology )  const
+- +-
+- +-

Build the actual topology.

+-

Build the actual topology once initialized with hwloc_topology_init() and tuned with Configure Topology Detection routines. No other routine may be called earlier using this topology context.

+-
Parameters:
+- +- +-
topology is the topology to be loaded with objects.
+-
+-
+-
Returns:
0 on success, -1 on error.
+-
See also:
Configure Topology Detection
+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Compare the depth of two object types. ++

++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 type1 objects usually include type2 objects, are the same as type2 objects, or are included in type2 objects. If the types can not be compared (because neither is usually contained in the other), HWLOC_TYPE_UNORDERED is returned. Object types containing CPUs can always be compared (usually, a system contains machines which contain nodes which contain sockets which contain caches, which contain cores, which contain processors).

++

Note:
HWLOC_OBJ_PU will always be the deepest.

++This does not mean that the actual topology will respect that order: e.g. as of today cores may also contain caches, and sockets may also contain nodes. This is thus just to be seen as a fallback comparison method.

++
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00038.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00038.html +--- hwloc-1.1/doc/doxygen-doc/html/a00038.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00038.html 2010-12-31 23:48:22.509902913 +0100 +@@ -1,407 +1,58 @@ +- +- +- +- +-Hardware Locality (hwloc): Configure Topology Detection +- +- +- +- +- +- +-
+- +-
+-

Configure Topology Detection

+-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-Data Structures

struct  hwloc_topology_discovery_support
 Flags describing actual discovery support for this topology. More...
struct  hwloc_topology_cpubind_support
 Flags describing actual PU binding support for this topology. More...
struct  hwloc_topology_membind_support
 Flags describing actual memory binding support for this topology. More...
struct  hwloc_topology_support
 Set of flags describing actual support for this topology. More...

+-Enumerations

enum  hwloc_topology_flags_e { HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM, +-HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM +- }
 

Flags to be set onto a topology context before load.

+- More...

+-Functions

HWLOC_DECLSPEC int hwloc_topology_ignore_type (hwloc_topology_t topology, hwloc_obj_type_t type)
 Ignore an object type.
HWLOC_DECLSPEC int hwloc_topology_ignore_type_keep_structure (hwloc_topology_t topology, hwloc_obj_type_t type)
 Ignore an object type if it does not bring any structure.
HWLOC_DECLSPEC int hwloc_topology_ignore_all_keep_structure (hwloc_topology_t topology)
 Ignore all objects that do not bring any structure.
HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags)
 Set OR'ed flags to non-yet-loaded topology.
HWLOC_DECLSPEC int hwloc_topology_set_fsroot (hwloc_topology_t __hwloc_restrict topology, const char *__hwloc_restrict fsroot_path)
 Change the file-system root path when building the topology from sysfs/procfs.
HWLOC_DECLSPEC int hwloc_topology_set_pid (hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid)
 Change which pid the topology is viewed from.
HWLOC_DECLSPEC int hwloc_topology_set_synthetic (hwloc_topology_t __hwloc_restrict topology, const char *__hwloc_restrict description)
 Enable synthetic topology.
HWLOC_DECLSPEC int hwloc_topology_set_xml (hwloc_topology_t __hwloc_restrict topology, const char *__hwloc_restrict xmlpath)
 Enable XML-file based topology.
HWLOC_DECLSPEC int hwloc_topology_set_xmlbuffer (hwloc_topology_t __hwloc_restrict topology, const char *__hwloc_restrict buffer, int size)
 Enable XML based topology using a memory buffer instead of a file.
HWLOC_DECLSPEC struct
+-hwloc_topology_support
hwloc_topology_get_support (hwloc_topology_t __hwloc_restrict topology)
 Retrieve the topology support.
+-

Detailed Description

+-

These functions can optionally be called between hwloc_topology_init() and hwloc_topology_load() to configure how the detection should be performed, e.g. to ignore some objects types, define a synthetic topology, etc.

+-

If none of them is called, the default is to detect all the objects of the machine that the caller is allowed to access.

+-

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 hwloc_topology_set_xml() had been called. HWLOC_FSROOT switches to reading the topology from the specified Linux filesystem root as if hwloc_topology_set_fsroot() had been called. Finally, HWLOC_THISSYSTEM enforces the return value of hwloc_topology_is_thissystem().

+-

Enumeration Type Documentation

+- +-
+-
+- +- +- +- +-
enum hwloc_topology_flags_e
+-
+-
++ ++ ++Hardware Locality (hwloc): Topology Objects ++ ++ ++ ++ ++

Topology Objects

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +-

Flags to be set onto a topology context before load.

+-

Flags should be given to hwloc_topology_set_flags().

+-
Enumerator:

Data Structures

struct  hwloc_obj_memory_s
 Object memory. More...
struct  hwloc_obj
 Structure of a topology object. More...
union  hwloc_obj_attr_u
 Object type-specific Attributes. More...
struct  hwloc_obj_info_s
 Object info. More...

Typedefs

typedef hwloc_objhwloc_obj_t
+- +- ++ +
HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM  +-

Detect the whole system, ignore reservations and offline settings.

+-

Gather all resources, even if some were disabled by the administrator. For instance, ignore Linux Cpusets and gather all processors and memory nodes, and ignore the fact that some resources may be offline.

+-
HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM  +-

Assume that the selected backend provides the topology for the system on which we are running.

+-

This forces hwloc_topology_is_thissystem 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.

+-

Setting the environment variable HWLOC_THISSYSTEM may also result in the same behavior.

+-

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.

+-
 Convenience typedef; a pointer to a struct hwloc_obj.
+- +- +- +-
+-
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC struct hwloc_topology_support* hwloc_topology_get_support (hwloc_topology_t __hwloc_restrict  topology )  [read]
+-
+-
+- +-

Retrieve the topology support.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_topology_ignore_all_keep_structure (hwloc_topology_t  topology ) 
+-
+-
+- +-

Ignore all objects that do not bring any structure.

+-

Ignore all objects that do not bring any structure: Each ignored object should have a single children or be the only child of its parent.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_topology_ignore_type (hwloc_topology_t  topology,
hwloc_obj_type_t  type 
)
+-
+-
+- +-

Ignore an object type.

+-

Ignore all objects from the given type. The bottom-level type HWLOC_OBJ_PU may not be ignored. The top-level object of the hierarchy will never be ignored, even if this function succeeds.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_topology_ignore_type_keep_structure (hwloc_topology_t  topology,
hwloc_obj_type_t  type 
)
+-
+-
+- +-

Ignore an object type if it does not bring any structure.

+-

Ignore all objects from the given type as long as they do not bring any structure: Each ignored object should have a single children or be the only child of its parent. The bottom-level type HWLOC_OBJ_PU may not be ignored.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t  topology,
unsigned long  flags 
)
+-
+-
+- +-

Set OR'ed flags to non-yet-loaded topology.

+-

Set a OR'ed set of hwloc_topology_flags_e onto a topology that was not yet loaded.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- ++

Typedef Documentation

++

++

HWLOC_DECLSPEC int hwloc_topology_set_fsroot (hwloc_topology_t __hwloc_restrict  topology,
++ ++ ++ ++
++ + +- +- +- +- +- +- +- +- +- +- +-
const char *__hwloc_restrict  fsroot_path 
)
+- +-
+- +-

Change the file-system root path when building the topology from sysfs/procfs.

+-

On Linux system, use sysfs and procfs files as if they were mounted on the given fsroot_path instead of the main file-system root. Setting the environment variable HWLOC_FSROOT may also result in this behavior. Not using the main file-system root causes hwloc_topology_is_thissystem() to return 0.

+-
Note:
For conveniency, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded file is really the underlying system.
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_topology_set_pid (hwloc_topology_t __hwloc_restrict  topology,
hwloc_pid_t  pid 
)
+-
+-
+- +-

Change which pid the topology is viewed from.

+-

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 hwloc_topology_set_pid() permits to make it expose the topology of the machine from the point of view of another process.

+-
Note:
hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows platforms
+-
+--1 is returned and errno is set to ENOSYS on platforms that do not support this feature.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_topology_set_synthetic (hwloc_topology_t __hwloc_restrict  topology,
const char *__hwloc_restrict  description 
)
+-
+-
+- +-

Enable synthetic topology.

+-

Gather topology information from the given description which should be a comma separated string of numbers describing the arity of each level. Each number may be prefixed with a type and a colon to enforce the type of a level. If only some level types are enforced, hwloc will try to choose the other types according to usual topologies, but it may fail and you may have to specify more level types manually.

+-
Note:
For conveniency, this backend provides empty binding hooks which just return success.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_topology_set_xml (hwloc_topology_t __hwloc_restrict  topology,
const char *__hwloc_restrict  xmlpath 
)
+-
+-
+- +-

Enable XML-file based topology.

+-

Gather topology information from the XML file given at xmlpath. Setting the environment variable HWLOC_XMLFILE may also result in this behavior. This file may have been generated earlier with lstopo file.xml.

+-
Note:
For conveniency, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded file is really the underlying system.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ + +
HWLOC_DECLSPEC int hwloc_topology_set_xmlbuffer (hwloc_topology_t __hwloc_restrict  topology,
const char *__hwloc_restrict  buffer,
int  size 
)typedef struct hwloc_obj* hwloc_obj_t
+-
+-
+- +-

Enable XML based topology using a memory buffer instead of a file.

+-

Gather topology information from the XML memory buffer given at buffer and of length length.

+- +-
+-
+- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convenience typedef; a pointer to a struct hwloc_obj. ++

++

++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00039.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00039.html +--- hwloc-1.1/doc/doxygen-doc/html/a00039.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00039.html 2010-12-31 23:48:22.513903403 +0100 +@@ -1,190 +1,173 @@ +- +- +- +- +-Hardware Locality (hwloc): Tinker with topologies. +- +- +- +- +- +- +-
+- +-
+-

Tinker with topologies.

+-
+-
+- +- +- +- +- +- +- +- +- +- +-

+-Functions

HWLOC_DECLSPEC void hwloc_topology_export_xml (hwloc_topology_t topology, const char *xmlpath)
 Export the topology into an XML file.
HWLOC_DECLSPEC void hwloc_topology_export_xmlbuffer (hwloc_topology_t topology, char **xmlbuffer, int *buflen)
 Export the topology into a newly-allocated XML memory buffer.
HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object_by_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, const char *name)
 Add a MISC object to the topology.
HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object_by_parent (hwloc_topology_t topology, hwloc_obj_t parent, const char *name)
 Add a MISC object to the topology.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_topology_export_xml (hwloc_topology_t  topology,
const char *  xmlpath 
)
+-
+-
++ ++ ++Hardware Locality (hwloc): Create and Destroy Topologies ++ ++ ++ ++ ++

Create and Destroy Topologies

++ ++ ++ ++ ++ ++ + +-

Export the topology into an XML file.

+-

This file may be loaded later through hwloc_topology_set_xml().

++ ++ + +- +- +- +-
+-
+-

Functions

int hwloc_topology_init (hwloc_topology_t *topologyp)
 Allocate a topology context.
int hwloc_topology_load (hwloc_topology_t topology)
 Build the actual topology.
void hwloc_topology_destroy (hwloc_topology_t topology)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_topology_export_xmlbuffer (hwloc_topology_t  topology,
char **  xmlbuffer,
int *  buflen 
)
+-
+-
++
 Terminate and free a topology context.
void hwloc_topology_check (hwloc_topology_t topology)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++
HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object_by_cpuset (hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset,
const char *  name 
)
 Run internal checks on a topology structure.
++


Function Documentation

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
void hwloc_topology_check hwloc_topology_t  topology  ) 
+- +-
+- +-

Add a MISC object to the topology.

+-

A new MISC object will be created and inserted into the topology at the position given by bitmap cpuset.

+-

cpuset and name will be copied.

+-
Returns:
the newly-created object
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object_by_parent (hwloc_topology_t  topology,
hwloc_obj_t  parent,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Run internal checks on a topology structure. ++

++

Parameters:
++ ++ ++
topology is the topology to be checked
++
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++
void hwloc_topology_destroy hwloc_topology_t  topology  ) 
const char *  name 
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Terminate and free a topology context. ++

++

Parameters:
++ ++ ++
topology is the topology to be freed
++
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++
int hwloc_topology_init hwloc_topology_t topologyp  ) 
)
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Allocate a topology context. ++

++

Parameters:
++ ++ ++
[out] topologyp is assigned a pointer to the new allocated context.
++
++
Returns:
0 on success, -1 on error.
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_topology_load hwloc_topology_t  topology  ) 
+- +-
+- +-

Add a MISC object to the topology.

+-

A new MISC object will be created and inserted into the topology at the position given by parent.

+-

name will be copied.

+-
Returns:
the newly-created object
+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Build the actual topology. ++

++Build the actual topology once initialized with hwloc_topology_init() and tuned with Configure Topology Detection routines. No other routine may be called earlier using this topology context.

++

Parameters:
++ ++ ++
topology is the topology to be loaded with objects.
++
++
Returns:
0 on success, -1 on error.
++
See also:
hwlocality_configuration
++
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00040.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00040.html +--- hwloc-1.1/doc/doxygen-doc/html/a00040.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00040.html 2010-12-31 23:48:22.549907808 +0100 +@@ -1,246 +1,497 @@ +- +- +- +- +-Hardware Locality (hwloc): Get some Topology Information +- +- +- +- +- +- +-
+- +-
+-

Get some Topology Information

+-
+-
+- +- +-

+-Enumerations

enum  hwloc_get_type_depth_e { HWLOC_TYPE_DEPTH_UNKNOWN, +-HWLOC_TYPE_DEPTH_MULTIPLE ++ ++ ++Hardware Locality (hwloc): Configure Topology Detection ++ ++ ++ ++ ++

Configure Topology Detection

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +- +- +- +- +- +- +- +- +- +- +- +- +- +-

Data Structures

struct  hwloc_topology_discovery_support
 Flags describing actual discovery support for this topology. More...
struct  hwloc_topology_cpubind_support
 Flags describing actual PU binding support for this topology. More...
struct  hwloc_topology_membind_support
 Flags describing actual memory binding support for this topology. More...
struct  hwloc_topology_support
 Set of flags describing actual support for this topology. More...

Enumerations

enum  hwloc_topology_flags_e { HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM, ++HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM + }

+-Functions

HWLOC_DECLSPEC unsigned hwloc_topology_get_depth (hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure
 Get the depth of the hierachical tree of objects.
HWLOC_DECLSPEC int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the depth of objects of type type.
HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth) __hwloc_attribute_pure
 Returns the type of objects at depth depth.
HWLOC_DECLSPEC unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, unsigned depth) __hwloc_attribute_pure
 Returns the width of level at depth depth.
static __hwloc_inline int
+-__hwloc_attribute_pure 
hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the width of level type type.
HWLOC_DECLSPEC int hwloc_topology_is_thissystem (hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure
 Does the topology context come from this system?
+-

Enumeration Type Documentation

+- +-
+-
+- +- +- +- +-
enum hwloc_get_type_depth_e
+-
+-
+-
Enumerator:
+- +- +-
HWLOC_TYPE_DEPTH_UNKNOWN  +-

No object of given type exists in the topology.

+-
HWLOC_TYPE_DEPTH_MULTIPLE  +-

Objects of given type exist at different depth in the topology.

+-
+-
+-
+ +-
+-
+-

Function Documentation

+- +-
+-
+- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
 Flags to be set onto a topology context before load. More...

Functions

int hwloc_topology_ignore_type (hwloc_topology_t topology, hwloc_obj_type_t type)
 Ignore an object type.
int hwloc_topology_ignore_type_keep_structure (hwloc_topology_t topology, hwloc_obj_type_t type)
 Ignore an object type if it does not bring any structure.
int hwloc_topology_ignore_all_keep_structure (hwloc_topology_t topology)
 Ignore all objects that do not bring any structure.
int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags)
 Set OR'ed flags to non-yet-loaded topology.
int hwloc_topology_set_fsroot (hwloc_topology_t restrict topology, const char *restrict fsroot_path)
 Change the file-system root path when building the topology from sysfs/procfs.
int hwloc_topology_set_pid (hwloc_topology_t restrict topology, hwloc_pid_t pid)
 Change which pid the topology is viewed from.
int hwloc_topology_set_synthetic (hwloc_topology_t restrict topology, const char *restrict description)
 Enable synthetic topology.
int hwloc_topology_set_xml (hwloc_topology_t restrict topology, const char *restrict xmlpath)
 Enable XML-file based topology.
int hwloc_topology_set_xmlbuffer (hwloc_topology_t restrict topology, const char *restrict buffer, int size)
 Enable XML based topology using a memory buffer instead of a file.
const struct
++hwloc_topology_support
hwloc_topology_get_support (hwloc_topology_t restrict topology)
 Retrieve the topology support.
++

Detailed Description

++These functions can optionally be called between hwloc_topology_init() and hwloc_topology_load() to configure how the detection should be performed, e.g. to ignore some objects types, define a synthetic topology, etc.

++If none of them is called, the default is to detect all the objects of the machine that the caller is allowed to access.

++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 hwloc_topology_set_xml() had been called. HWLOC_FSROOT switches to reading the topology from the specified Linux filesystem root as if hwloc_topology_set_fsroot() had been called. Finally, HWLOC_THISSYSTEM enforces the return value of hwloc_topology_is_thissystem().


Enumeration Type Documentation

++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ + +- +- +- +- +- ++
HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t  topology, enum hwloc_topology_flags_e
unsigned  depth 
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Flags to be set onto a topology context before load. ++

++Flags should be given to hwloc_topology_set_flags().

Enumeration values:
++ ++ ++ ++
HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM  ++Detect the whole system, ignore reservations and offline settings. ++

++Gather all resources, even if some were disabled by the administrator. For instance, ignore Linux Cpusets and gather all processors and memory nodes, and ignore the fact that some resources may be offline.

HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM  ++Assume that the selected backend provides the topology for the system on which we are running. ++

++This forces hwloc_topology_is_thissystem 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.

++Setting the environment variable HWLOC_THISSYSTEM may also result in the same behavior.

++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.

++
++
++


Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++
const struct hwloc_topology_support* hwloc_topology_get_support hwloc_topology_t restrict  topology  ) 
)
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Retrieve the topology support. ++

++

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_topology_ignore_all_keep_structure hwloc_topology_t  topology  ) 
+- +-
+- +-

Returns the type of objects at depth depth.

+-
Returns:
-1 if depth depth does not exist.
+- +-
+- +- +-
+-
+- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t  topology,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Ignore all objects that do not bring any structure. ++

++Ignore all objects that do not bring any structure: Each ignored object should have a single children or be the only child of its parent.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++
int hwloc_topology_ignore_type hwloc_topology_t  topology,
hwloc_obj_type_t  type
unsigned  depth 
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Ignore an object type. ++

++Ignore all objects from the given type. The bottom-level type HWLOC_OBJ_PU may not be ignored. The top-level object of the hierarchy will never be ignored, even if this function succeeds.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++
int hwloc_topology_ignore_type_keep_structure hwloc_topology_t  topology,
hwloc_obj_type_t  type
)
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Ignore an object type if it does not bring any structure. ++

++Ignore all objects from the given type as long as they do not bring any structure: Each ignored object should have a single children or be the only child of its parent. The bottom-level type HWLOC_OBJ_PU may not be ignored.

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_topology_set_flags hwloc_topology_t  topology,
unsigned long  flags
+- +-
+- +-

Returns the width of level at depth depth.

+- +-
+- +- +-
+-
+- +- +- +- +- +- ++ ++ ++
static __hwloc_inline int __hwloc_attribute_pure hwloc_get_nbobjs_by_type (hwloc_topology_t  topology,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Set OR'ed flags to non-yet-loaded topology. ++

++Set a OR'ed set of hwloc_topology_flags_e onto a topology that was not yet loaded.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++
int hwloc_topology_set_fsroot hwloc_topology_t restrict  topology,
const char *restrict  fsroot_path
hwloc_obj_type_t  type 
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Change the file-system root path when building the topology from sysfs/procfs. ++

++On Linux system, use sysfs and procfs files as if they were mounted on the given fsroot_path instead of the main file-system root. Setting the environment variable HWLOC_FSROOT may also result in this behavior. Not using the main file-system root causes hwloc_topology_is_thissystem() to return 0.

++

Note:
For conveniency, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded file is really the underlying system.
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++
int hwloc_topology_set_pid hwloc_topology_t restrict  topology,
hwloc_pid_t  pid
) [static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Change which pid the topology is viewed from. ++

++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 hwloc_topology_set_pid() permits to make it expose the topology of the machine from the point of view of another process.

++

Note:
hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows platforms

++-1 is returned and errno is set to ENOSYS on platforms that do not support this feature.

++
++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_topology_set_synthetic hwloc_topology_t restrict  topology,
const char *restrict  description
+- +-
+- +-

Returns the width of level type type.

+-

If no object for that type exists, 0 is returned. If there are several levels with objects of that type, -1 is returned.

+- +-
+- +- +-
+-
+- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_get_type_depth (hwloc_topology_t  topology,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Enable synthetic topology. ++

++Gather topology information from the given description which should be a comma separated string of numbers describing the arity of each level. Each number may be prefixed with a type and a colon to enforce the type of a level. If only some level types are enforced, hwloc will try to choose the other types according to usual topologies, but it may fail and you may have to specify more level types manually.

++

Note:
For conveniency, this backend provides empty binding hooks which just return success.
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + ++
int hwloc_topology_set_xml hwloc_topology_t restrict  topology,
const char *restrict  xmlpath
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Enable XML-file based topology. ++

++Gather topology information from the XML file given at xmlpath. Setting the environment variable HWLOC_XMLFILE may also result in this behavior. This file may have been generated earlier with lstopo file.xml.

++

Note:
For conveniency, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded file is really the underlying system.
++
++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ ++ + +-
hwloc_obj_type_t  type  int hwloc_topology_set_xmlbuffer hwloc_topology_t restrict  topology,
)const char *restrict  buffer,
+- +-
+- +-

Returns the depth of objects of type type.

+-

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 HWLOC_TYPE_DEPTH_UNKNOWN.

+-

If type is absent but a similar type is acceptable, see also hwloc_get_type_or_below_depth() and hwloc_get_type_or_above_depth().

+- +-
+- +- +-
+-
+- + +- +- +- +- +- +- ++ ++ ++ ++ + +-
HWLOC_DECLSPEC unsigned hwloc_topology_get_depth (hwloc_topology_t __hwloc_restrict  topology ) int  size
+-
+-
+- +-

Get the depth of the hierachical tree of objects.

+-

This is the depth of HWLOC_OBJ_PU objects plus one.

+- +-
+-
+- +-
+-
+- + +- +- +- +- +- +- ++ ++ ++ + +
HWLOC_DECLSPEC int hwloc_topology_is_thissystem (hwloc_topology_t __hwloc_restrict  topology ) 
+-
+-
+- +-

Does the topology context come from this system?

+-
Returns:
1 if this topology context was built using the system running this program.
+-
+-0 instead (for instance if using another file-system root, a XML topology file, or a synthetic topology).
+- +-
+-
+- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Enable XML based topology using a memory buffer instead of a file. ++

++Gather topology information from the XML memory buffer given at buffer and of length length.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00041.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00041.html +--- hwloc-1.1/doc/doxygen-doc/html/a00041.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00041.html 2010-12-31 23:48:22.460896917 +0100 +@@ -1,116 +1,210 @@ +- +- +- +- +-Hardware Locality (hwloc): Retrieve Objects +- +- +- +- +- +- +-
+- +-
+-

Retrieve Objects

+-
+-
+- +- +- +- +- +- +-

+-Functions

HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, unsigned depth, unsigned idx) __hwloc_attribute_pure
 Returns the topology object at index index from depth depth.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)
 Returns the topology object at index index with type type.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++Hardware Locality (hwloc): Tinker with topologies. ++ ++ ++ ++ ++

Tinker with topologies.

HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t  topology,
unsigned  depth,
unsigned  idx 
)
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

void hwloc_topology_export_xml (hwloc_topology_t topology, const char *xmlpath)
 Export the topology into an XML file.
void hwloc_topology_export_xmlbuffer (hwloc_topology_t topology, char **xmlbuffer, int *buflen)
 Export the topology into a newly-allocated XML memory buffer.
hwloc_obj_t hwloc_topology_insert_misc_object_by_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, const char *name)
 Add a MISC object to the topology.
hwloc_obj_t hwloc_topology_insert_misc_object_by_parent (hwloc_topology_t topology, hwloc_obj_t parent, const char *name)
 Add a MISC object to the topology.
++

Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
void hwloc_topology_export_xml hwloc_topology_t  topology,
const char *  xmlpath
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Returns the topology object at index index from depth depth.

++

++Export the topology into an XML file. ++

++This file may be loaded later through hwloc_topology_set_xml().

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
void hwloc_topology_export_xmlbuffer hwloc_topology_t  topology,
char **  xmlbuffer,
int *  buflen
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Export the topology into a newly-allocated XML memory buffer. ++

++xmlbuffer is allocated by the callee and should be freed with xmlFree later in the caller.

++This memory buffer may be loaded later through hwloc_topology_set_xmlbuffer(). ++ ++

++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_obj_by_type (hwloc_topology_t  topology, hwloc_obj_t hwloc_topology_insert_misc_object_by_cpuset hwloc_topology_t  topology,
hwloc_obj_type_t  type, hwloc_const_cpuset_t  cpuset,
unsigned  idx const char *  name
) [static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Returns the topology object at index index with type type.

+-

If no object for that type exists, NULL is returned. If there are several levels with objects of that type, NULL is returned and ther caller may fallback to hwloc_get_obj_by_depth().

++

++Add a MISC object to the topology. ++

++A new MISC object will be created and inserted into the topology at the position given by bitmap cpuset.

++cpuset and name will be copied.

++

Returns:
the newly-created object
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
hwloc_obj_t hwloc_topology_insert_misc_object_by_parent hwloc_topology_t  topology,
hwloc_obj_t  parent,
const char *  name
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00042.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00042.html +--- hwloc-1.1/doc/doxygen-doc/html/a00042.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00042.html 2010-12-31 23:48:22.491900711 +0100 +@@ -1,318 +1,292 @@ +- +- +- +- +-Hardware Locality (hwloc): Object/String Conversion +- +- +- +- +- +- +-
+- +-
+-

Object/String Conversion

+-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-Functions

HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const
 Return a stringified topology object type.
HWLOC_DECLSPEC hwloc_obj_type_t hwloc_obj_type_of_string (const char *string) __hwloc_attribute_pure
 Return an object type from the string.
HWLOC_DECLSPEC int hwloc_obj_type_snprintf (char *__hwloc_restrict string, size_t size, hwloc_obj_t obj, int verbose)
 Stringify the type of a given topology object into a human-readable form.
HWLOC_DECLSPEC int hwloc_obj_attr_snprintf (char *__hwloc_restrict string, size_t size, hwloc_obj_t obj, const char *__hwloc_restrict separator, int verbose)
 Stringify the attributes of a given topology object into a human-readable form.
HWLOC_DECLSPEC int hwloc_obj_snprintf (char *__hwloc_restrict string, size_t size, hwloc_topology_t topology, hwloc_obj_t obj, const char *__hwloc_restrict indexprefix, int verbose)
 Stringify a given topology object into a human-readable form.
HWLOC_DECLSPEC int hwloc_obj_cpuset_snprintf (char *__hwloc_restrict str, size_t size, size_t nobj, const hwloc_obj_t *__hwloc_restrict objs)
 Stringify the cpuset containing a set of objects.
static __hwloc_inline char
+-*__hwloc_attribute_pure 
hwloc_obj_get_info_by_name (hwloc_obj_t obj, const char *name)
 Search the given key name in object infos and return the corresponding value.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_obj_attr_snprintf (char *__hwloc_restrict  string,
size_t  size,
hwloc_obj_t  obj,
const char *__hwloc_restrict  separator,
int  verbose 
)
+-
+-
++ ++ ++Hardware Locality (hwloc): Get some Topology Information ++ ++ ++ ++ ++

Get some Topology Information

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +-

Stringify the attributes of a given topology object into a human-readable form.

+-

Attribute values are separated by separator.

+-

Only the major attributes are printed in non-verbose mode.

+-
Returns:
how many characters were actually written (not including the ending \0), or -1 on error.
++ ++ + +- +- +- +-
+-
+-

Enumerations

enum  hwloc_get_type_depth_e { HWLOC_TYPE_DEPTH_UNKNOWN, ++HWLOC_TYPE_DEPTH_MULTIPLE ++ }

Functions

unsigned hwloc_topology_get_depth (hwloc_topology_t restrict topology)
 Get the depth of the hierachical tree of objects.
int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the depth of objects of type type.
hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth)
 Returns the type of objects at depth depth.
unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, unsigned depth)
 Returns the width of level at depth depth.
inline int  hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++
HWLOC_DECLSPEC int hwloc_obj_cpuset_snprintf (char *__hwloc_restrict  str,
size_t  size,
size_t  nobj,
const hwloc_obj_t *__hwloc_restrict  objs 
 Returns the width of level type type.
int hwloc_topology_is_thissystem (hwloc_topology_t restrict topology)
 Does the topology context come from this system?
++

Enumeration Type Documentation

++

++ ++ ++
++ + +- +- +- ++ + +
)enum hwloc_get_type_depth_e
+- +-
+- +-

Stringify the cpuset containing a set of objects.

+-
Returns:
how many characters were actually written (not including the ending \0).
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline char* __hwloc_attribute_pure hwloc_obj_get_info_by_name (hwloc_obj_t  obj,
const char *  name 
) [static]
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++

Enumeration values:
++ ++ ++ ++
HWLOC_TYPE_DEPTH_UNKNOWN  ++No object of given type exists in the topology.
HWLOC_TYPE_DEPTH_MULTIPLE  ++Objects of given type exist at different depth in the topology.
++
++
++

Function Documentation

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
hwloc_obj_type_t hwloc_get_depth_type hwloc_topology_t  topology,
unsigned  depth
+- +-
+- +-

Search the given key name in object infos and return the corresponding value.

+-
Returns:
NULL if no such key exists.
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_obj_snprintf (char *__hwloc_restrict  string,
size_t  size,
hwloc_topology_t  topology,
hwloc_obj_t  obj,
const char *__hwloc_restrict  indexprefix,
int  verbose 
)
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Returns the type of objects at depth depth. ++

++

Returns:
-1 if depth depth does not exist.
++
++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
unsigned hwloc_get_nbobjs_by_depth hwloc_topology_t  topology,
unsigned  depth
+- +-
+- +-

Stringify a given topology object into a human-readable form.

+-
Note:
This function is deprecated in favor of hwloc_obj_type_snprintf() and hwloc_obj_attr_snprintf() since it is not very flexible and only prints physical/OS indexes.
+-

Fill string string up to size characters with the description of topology object obj in topology topology.

+-

If verbose is set, a longer description is used. Otherwise a short description is used.

+-

indexprefix is used to prefix the os_index attribute number of the object in the description. If NULL, the # character is used.

+-
Returns:
how many characters were actually written (not including the ending \0), or -1 on error.
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC hwloc_obj_type_t hwloc_obj_type_of_string (const char *  string ) 
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Returns the width of level at depth depth. ++

++

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline int hwloc_get_nbobjs_by_type hwloc_topology_t  topology,
hwloc_obj_type_t  type
[static]
+- +-
+- +-

Return an object type from the string.

+-
Returns:
-1 if unrecognized.
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_obj_type_snprintf (char *__hwloc_restrict  string,
size_t  size,
hwloc_obj_t  obj,
int  verbose 
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Returns the width of level type type. ++

++If no object for that type exists, 0 is returned. If there are several levels with objects of that type, -1 is returned.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++
int hwloc_get_type_depth hwloc_topology_t  topology,
hwloc_obj_type_t  type
)
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Returns the depth of objects of type type. ++

++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 HWLOC_TYPE_DEPTH_UNKNOWN.

++If type is absent but a similar type is acceptable, see also hwloc_get_type_or_below_depth() and hwloc_get_type_or_above_depth().

++

++ ++ ++ ++ + +-

Get current process memory binding in cpuset cpuset.

+- +- +- +- +-
+-
+-
++ ++ ++ ++ ++ ++ ++ ++ + +
unsigned hwloc_topology_get_depth hwloc_topology_t restrict  topology  ) 
+- +-
+- +-

Stringify the type of a given topology object into a human-readable form.

+-

It differs from hwloc_obj_type_string() because it prints type attributes such as cache depth.

+-
Returns:
how many characters were actually written (not including the ending \0), or -1 on error.
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC const char* hwloc_obj_type_string (hwloc_obj_type_t  type )  const
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get the depth of the hierachical tree of objects. ++

++This is the depth of HWLOC_OBJ_PU objects plus one.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_topology_is_thissystem hwloc_topology_t restrict  topology  ) 
+- +-
+- +-

Return a stringified topology object type.

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Does the topology context come from this system? ++

++

Returns:
1 if this topology context was built using the system running this program.

++0 instead (for instance if using another file-system root, a XML topology file, or a synthetic topology).

++
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00043.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00043.html +--- hwloc-1.1/doc/doxygen-doc/html/a00043.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00043.html 2010-12-31 23:48:22.563909522 +0100 +@@ -1,361 +1,114 @@ +- +- +- +- +-Hardware Locality (hwloc): CPU binding +- +- +- +- +- +- +-
+- +-
+-

CPU binding

+-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-Enumerations

enum  hwloc_cpubind_flags_t { HWLOC_CPUBIND_PROCESS, +-HWLOC_CPUBIND_THREAD, +-HWLOC_CPUBIND_STRICT, +-HWLOC_CPUBIND_NOMEMBIND +- }
 

Process/Thread binding flags.

+- More...

+-Functions

HWLOC_DECLSPEC int hwloc_set_cpubind (hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)
 Bind current process or thread on cpus given in bitmap set.
HWLOC_DECLSPEC int hwloc_get_cpubind (hwloc_topology_t topology, hwloc_cpuset_t set, int flags)
 Get current process or thread binding.
HWLOC_DECLSPEC int hwloc_set_proc_cpubind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags)
 Bind a process pid on cpus given in bitmap set.
HWLOC_DECLSPEC int hwloc_get_proc_cpubind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)
 Get the current binding of process pid.
HWLOC_DECLSPEC int hwloc_set_thread_cpubind (hwloc_topology_t topology, hwloc_thread_t tid, hwloc_const_cpuset_t set, int flags)
 Bind a thread tid on cpus given in bitmap set.
HWLOC_DECLSPEC int hwloc_get_thread_cpubind (hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int flags)
 Get the current binding of thread tid.
+-

Detailed Description

+-

It is often useful to call hwloc_bitmap_singlify() first so that a single CPU remains in the set. This way, the process will not even migrate between different CPUs. Some OSes also only support that kind of binding.

+-
Note:
Some OSes do not provide all ways to bind processes, threads, etc and the corresponding binding functions may fail. -1 is returned and errno is set to ENOSYS when it is not possible to bind the requested kind of object processes/threads. errno is set to EXDEV 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).
+-

The most portable version that should be preferred over the others, whenever possible, is

+-
 hwloc_set_cpubind(topology, set, 0),
+-

as it just binds the current program, assuming it is monothread, or

+-

which binds the current thread of the current program (which may be multithreaded).

+-
Note:
To unbind, just call the binding function with either a full cpuset or a cpuset equal to the system cpuset.
+-
+-On some OSes, CPU binding may have effects on memory binding, see HWLOC_CPUBIND_NOMEMBIND
+-

Enumeration Type Documentation

+- +-
+-
+- +- +- +- +-
enum hwloc_cpubind_flags_t
+-
+-
++ ++ ++Hardware Locality (hwloc): Retrieve Objects ++ ++ ++ ++ ++

Retrieve Objects

++ ++ ++ ++ ++ ++ + +-

Process/Thread binding flags.

+-

These flags can be used to refine the binding policy.

+-

The default (0) is to bind the current process, assumed to be mono-thread, in a non-strict way. This is the most portable way to bind as all OSes usually provide it.

+-
Note:
Not all systems support all kinds of binding.
+-
Enumerator:

Functions

hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, unsigned depth, unsigned idx)
 Returns the topology object at index index from depth depth.
inline hwloc_obj_t
++ 
hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)
+- +- +- +- ++ +
HWLOC_CPUBIND_PROCESS  +-

Bind all threads of the current (possibly) multithreaded process.

+-
HWLOC_CPUBIND_THREAD  +-

Bind current thread of current process.

+-
HWLOC_CPUBIND_STRICT  +-

Request for strict binding from the OS.

+-

By default, when the designated CPUs are all busy while other CPUs are idle, OSes 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.

+-
Note:
Depending on OSes and implementations, strict binding may not be possible (implementation reason) or not allowed (administrative reasons), and the function will fail in that case.
+-

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.

+-
Note:
This flag is meaningless when retrieving the binding of a thread.
+-
HWLOC_CPUBIND_NOMEMBIND  +-

Avoid any effect on memory binding.

+-

On some OSes, 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.

+-
 Returns the topology object at index index with type type.
+- +- +- +-
+-
+-

Function Documentation

+- +-
+-
+- ++

Function Documentation

++

++

++ ++ ++ + +- +- +- +-
+-
+-
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
HWLOC_DECLSPEC int hwloc_get_cpubind (hwloc_topology_t  topology, hwloc_obj_t hwloc_get_obj_by_depth hwloc_topology_t  topology,
hwloc_cpuset_t  set, unsigned  depth,
int  flags unsigned  idx
)
+- +-
+- +-

Get current process or thread binding.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_get_proc_cpubind (hwloc_topology_t  topology,
hwloc_pid_t  pid,
hwloc_cpuset_t  set,
int  flags 
)
+-
+-
+- +-

Get the current binding of process pid.

+-
Note:
hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows platforms
+-
+-HWLOC_CPUBIND_THREAD can not be used in flags.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_get_thread_cpubind (hwloc_topology_t  topology,
hwloc_thread_t  tid,
hwloc_cpuset_t  set,
int  flags 
)
+-
+-
+- +-

Get the current binding of thread tid.

+-
Note:
hwloc_thread_t is pthread_t on unix platforms, and HANDLE on native Windows platforms
+-
+-HWLOC_CPUBIND_PROCESS can not be used in flags.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_set_cpubind (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
int  flags 
)
+-
+-
+- +-

Bind current process or thread on cpus given in bitmap set.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported
+-
+--1 with errno set to EXDEV if the binding cannot be enforced
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_set_proc_cpubind (hwloc_topology_t  topology,
hwloc_pid_t  pid,
hwloc_const_cpuset_t  set,
int  flags 
)
+-
+-
+- +-

Bind a process pid on cpus given in bitmap set.

+-
Note:
hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows platforms
+-
+-HWLOC_CPUBIND_THREAD can not be used in flags.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_set_thread_cpubind (hwloc_topology_t  topology,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Returns the topology object at index index from depth depth. ++

++

++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
hwloc_thread_t  tid, inline hwloc_obj_t hwloc_get_obj_by_type hwloc_topology_t  topology,
hwloc_const_cpuset_t  set, hwloc_obj_type_t  type,
int  flags unsigned  idx
) [static]
+- +-
+- +-

Bind a thread tid on cpus given in bitmap set.

+-
Note:
hwloc_thread_t is pthread_t on unix platforms, and HANDLE on native Windows platforms
+-
+-HWLOC_CPUBIND_PROCESS can not be used in flags.
+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Returns the topology object at index index with type type. ++

++If no object for that type exists, NULL is returned. If there are several levels with objects of that type, NULL is returned and ther caller may fallback to hwloc_get_obj_by_depth().

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00044.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00044.html +--- hwloc-1.1/doc/doxygen-doc/html/a00044.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00044.html 2010-12-31 23:48:22.553908297 +0100 +@@ -1,931 +1,372 @@ +- +- +- +- +-Hardware Locality (hwloc): Memory binding +- +- +- +- +- +- +-
+- +-
+-

Memory binding

+-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-Enumerations

enum  hwloc_membind_policy_t {
+-  HWLOC_MEMBIND_DEFAULT, +-HWLOC_MEMBIND_FIRSTTOUCH, +-HWLOC_MEMBIND_BIND, +-HWLOC_MEMBIND_INTERLEAVE, +-
+-  HWLOC_MEMBIND_REPLICATE, +-HWLOC_MEMBIND_NEXTTOUCH +-
+- }
 

Memory binding policy.

+- More...
enum  hwloc_membind_flags_t {
+-  HWLOC_MEMBIND_PROCESS, +-HWLOC_MEMBIND_THREAD, +-HWLOC_MEMBIND_STRICT, +-HWLOC_MEMBIND_MIGRATE, +-
+-  HWLOC_MEMBIND_NOCPUBIND +-
+- }
 

Memory binding flags.

+- More...

+-Functions

HWLOC_DECLSPEC int hwloc_set_membind_nodeset (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind current process memory on the given nodeset nodeset.
HWLOC_DECLSPEC int hwloc_set_membind (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind current process memory on memory nodes near the given cpuset cpuset.
HWLOC_DECLSPEC int hwloc_get_membind_nodeset (hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in nodeset nodeset.
HWLOC_DECLSPEC int hwloc_get_membind (hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in cpuset cpuset.
HWLOC_DECLSPEC int hwloc_set_proc_membind_nodeset (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind given process memory on the given nodeset nodeset.
HWLOC_DECLSPEC int hwloc_set_proc_membind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind given process memory on memory nodes near the given cpuset cpuset.
HWLOC_DECLSPEC int hwloc_get_proc_membind_nodeset (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in nodeset nodeset.
HWLOC_DECLSPEC int hwloc_get_proc_membind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in cpuset cpuset.
HWLOC_DECLSPEC int hwloc_set_area_membind_nodeset (hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind some memory range on the given nodeset nodeset.
HWLOC_DECLSPEC int hwloc_set_area_membind (hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind some memory range on memory nodes near the given cpuset cpuset.
HWLOC_DECLSPEC int hwloc_get_area_membind_nodeset (hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get some memory range memory binding in nodeset nodeset.
HWLOC_DECLSPEC int hwloc_get_area_membind (hwloc_topology_t topology, const void *addr, size_t len, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get some memory range memory binding in cpuset cpuset.
HWLOC_DECLSPEC void * hwloc_alloc (hwloc_topology_t topology, size_t len)
 Allocate some memory.
HWLOC_DECLSPEC void * hwloc_alloc_membind_nodeset (hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc
 Allocate some memory on the given nodeset nodeset.
HWLOC_DECLSPEC void * hwloc_alloc_membind (hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc
 Allocate some memory on memory nodes near the given cpuset cpuset.
HWLOC_DECLSPEC int hwloc_free (hwloc_topology_t topology, void *addr, size_t len)
 Free some memory allocated by hwloc_alloc() or hwloc_alloc_membind().
+-

Detailed Description

+-
Note:
Not all OSes support all ways to bind existing allocated memory (migration), future memory allocation, explicit memory allocation, etc. and the corresponding binding functions may fail. -1 is returned and errno is set to ENOSYS when it is not possible to bind the requested kind of object processes/threads). errno is set to EXDEV when the requested cpuset can not be enforced (e.g. some systems only allow one NUMA node).
+-

The most portable version that should be preferred over the others, whenever possible, is

+-

which will try to allocate new data bound to the given set, possibly by changing the current memory binding policy, or at worse allocate memory without binding it at all. Since HWLOC_MEMBIND_STRICT is not given, this will even not fail unless a mere malloc() itself would fail, i.e. ENOMEM.

+-

Each binding is available with a CPU set argument or a NUMA memory node set argument. The name of the latter ends with _nodeset. It is also possible to convert between CPU set and node set using hwloc_cpuset_to_nodeset or hwloc_cpuset_from_nodeset.

+-
Note:
On some OSes, memory binding may have effects on CPU binding, see HWLOC_MEMBIND_NOCPUBIND
+-

Enumeration Type Documentation

+- +-
+-
+- +- +- +- +-
enum hwloc_membind_flags_t
+-
+-
+- +-

Memory binding flags.

+-

These flags can be used to refine the binding policy.

+-
Note:
Not all systems support all kinds of binding.
+-
Enumerator:
+- +- +- +- +- +-
HWLOC_MEMBIND_PROCESS  +-

Set policy for all threads of the current (possibly multithreaded) process.

+-
HWLOC_MEMBIND_THREAD  +-

Set policy for the current thread of the current process.

+-
HWLOC_MEMBIND_STRICT  +-

Request strict binding from the OS. The function will fail if the binding can not be completely enforced.

+-
HWLOC_MEMBIND_MIGRATE  +-

Migrate existing allocated memory. If memory can not be migrated and the STRICT flag is passed, an error will be returned.

+-
HWLOC_MEMBIND_NOCPUBIND  +-

Avoid any effect on CPU binding.

+-

On some OSes, some memory binding function would also bind the application on the corresponding CPUs. 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 on CPUs. This will however reduce the support of memory bindings, i.e. potentially return ENOSYS in some cases.

+-
+-
+-
+- +-
+-
+- +-
+-
+- +- +- +- +-
enum hwloc_membind_policy_t
+-
+-
+- +-

Memory binding policy.

+-

These can be used to choose the binding policy.

+-

Note that not all systems support all kinds of binding.

+-
Enumerator:
+- +- +- +- +- +- +-
HWLOC_MEMBIND_DEFAULT  +-

Reset the memory allocation policy to the system default.

+-
HWLOC_MEMBIND_FIRSTTOUCH  +-

Allocate memory on the given nodes, but preferably on the node where the first accessor is running.

+-
HWLOC_MEMBIND_BIND  +-

Allocate memory on the given nodes.

+-
HWLOC_MEMBIND_INTERLEAVE  +-

Allocate memory on the given nodes in a round-robin manner.

+-
HWLOC_MEMBIND_REPLICATE  +-

Replicate memory on the given nodes.

+-
HWLOC_MEMBIND_NEXTTOUCH  +-

On next touch of existing allocated memory, migrate it to the node where the memory reference happened.

+-
+-
+-
+- +-
+-
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void* hwloc_alloc (hwloc_topology_t  topology,
size_t  len 
)
+-
+-
+- +-

Allocate some memory.

+-

This is equivalent to malloc(), except it tries to allocated page-aligned memory from the OS.

+-
Note:
The allocated memory should be freed with hwloc_free().
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void* hwloc_alloc_membind (hwloc_topology_t  topology,
size_t  len,
hwloc_const_cpuset_t  cpuset,
hwloc_membind_policy_t  policy,
int  flags 
)
+-
+-
+- +-

Allocate some memory on memory nodes near the given cpuset cpuset.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported and HWLOC_MEMBIND_STRICT is given
+-
+--1 with errno set to EXDEV if the binding cannot be enforced and HWLOC_MEMBIND_STRICT is given
+-
Note:
The allocated memory should be freed with hwloc_free().
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void* hwloc_alloc_membind_nodeset (hwloc_topology_t  topology,
size_t  len,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
int  flags 
)
+-
+-
+- +-

Allocate some memory on the given nodeset nodeset.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported and HWLOC_MEMBIND_STRICT is given
+-
+--1 with errno set to EXDEV if the binding cannot be enforced and HWLOC_MEMBIND_STRICT is given
+-
Note:
The allocated memory should be freed with hwloc_free().
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_free (hwloc_topology_t  topology,
void *  addr,
size_t  len 
)
+-
+-
+- +-

Free some memory allocated by hwloc_alloc() or hwloc_alloc_membind().

++ ++ ++Hardware Locality (hwloc): Object/String Conversion ++ ++ ++ ++ ++

Object/String Conversion

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +-
+-
+-

Functions

const char * hwloc_obj_type_string (hwloc_obj_type_t type)
 Return a stringified topology object type.
hwloc_obj_type_t hwloc_obj_type_of_string (const char *string)
 Return an object type from the string.
int hwloc_obj_type_snprintf (char *restrict string, size_t size, hwloc_obj_t obj, int verbose)
 Stringify the type of a given topology object into a human-readable form.
int hwloc_obj_attr_snprintf (char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)
 Stringify the attributes of a given topology object into a human-readable form.
int hwloc_obj_snprintf (char *restrict string, size_t size, hwloc_topology_t topology, hwloc_obj_t obj, const char *restrict indexprefix, int verbose)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_get_area_membind (hwloc_topology_t  topology,
const void *  addr,
size_t  len,
hwloc_cpuset_t  cpuset,
hwloc_membind_policy_t policy,
int  flags 
)
+-
+-
+- +-

Get some memory range memory binding in cpuset cpuset.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_get_area_membind_nodeset (hwloc_topology_t  topology,
const void *  addr,
size_t  len,
hwloc_nodeset_t  nodeset,
hwloc_membind_policy_t policy,
int  flags 
)
+-
+-
+- +-

Get some memory range memory binding in nodeset nodeset.

++
 Stringify a given topology object into a human-readable form.
int hwloc_obj_cpuset_snprintf (char *restrict str, size_t size, size_t nobj, const hwloc_obj_t *restrict objs)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_get_membind (hwloc_topology_t  topology,
hwloc_cpuset_t  cpuset,
hwloc_membind_policy_t policy,
int  flags 
)
+-
+-
++
 Stringify the cpuset containing a set of objects.
inline char * hwloc_obj_get_info_by_name (hwloc_obj_t obj, const char *name)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_get_membind_nodeset (hwloc_topology_t  topology,
hwloc_nodeset_t  nodeset,
hwloc_membind_policy_t policy,
int  flags 
)
+-

+-
+- +-

Get current process memory binding in nodeset nodeset.

+- +-
+-
+- +-
+-
+- ++ ++
 Search the given key name in object infos and return the corresponding value.
++

Function Documentation

++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
HWLOC_DECLSPEC int hwloc_get_proc_membind (hwloc_topology_t  topology, int hwloc_obj_attr_snprintf char *restrict  string,
hwloc_pid_t  pid, size_t  size,
hwloc_cpuset_t  cpuset, hwloc_obj_t  obj,
hwloc_membind_policy_t policy, const char *restrict  separator,
int  flags int  verbose
)
+- +-
+- +-

Get current process memory binding in cpuset cpuset.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_get_proc_membind_nodeset (hwloc_topology_t  topology,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Stringify the attributes of a given topology object into a human-readable form. ++

++Attribute values are separated by separator.

++Only the major attributes are printed in non-verbose mode.

++

Returns:
how many characters were actually written (not including the ending \0), or -1 on error.
++
++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
hwloc_pid_t  pid, int hwloc_obj_cpuset_snprintf char *restrict  str,
hwloc_nodeset_t  nodeset, size_t  size,
hwloc_membind_policy_t policy, size_t  nobj,
int  flags const hwloc_obj_t *restrict  objs
)
+- +-
+- +-

Get current process memory binding in nodeset nodeset.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_set_area_membind (hwloc_topology_t  topology,
const void *  addr,
size_t  len,
hwloc_const_cpuset_t  cpuset,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Stringify the cpuset containing a set of objects. ++

++

Returns:
how many characters were actually written (not including the ending \0).
++
++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
hwloc_membind_policy_t  policy, inline char* hwloc_obj_get_info_by_name hwloc_obj_t  obj,
int  flags const char *  name
) [static]
+- +-
+- +-

Bind some memory range on memory nodes near the given cpuset cpuset.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported
+-
+--1 with errno set to EXDEV if the binding cannot be enforced
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_set_area_membind_nodeset (hwloc_topology_t  topology,
const void *  addr,
size_t  len,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Search the given key name in object infos and return the corresponding value. ++

++

Returns:
NULL if no such key exists.
++
++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ ++ + +-
int  flags  int hwloc_obj_snprintf char *restrict  string,
)size_t  size,
+- +-
+- +-

Bind some memory range on the given nodeset nodeset.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported
+-
+--1 with errno set to EXDEV if the binding cannot be enforced
+- +-
+- +- +-
+-
+- + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
HWLOC_DECLSPEC int hwloc_set_membind (hwloc_topology_t  topology, hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset, hwloc_obj_t  obj,
hwloc_membind_policy_t  policy, const char *restrict  indexprefix,
int  flags int  verbose
)
+-
+-
+- +-

Bind current process memory on memory nodes near the given cpuset cpuset.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported
+-
+--1 with errno set to EXDEV if the binding cannot be enforced
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_set_membind_nodeset (hwloc_topology_t  topology,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
int  flags 
)
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Stringify a given topology object into a human-readable form. ++

++

Note:
This function is deprecated in favor of hwloc_obj_type_snprintf() and hwloc_obj_attr_snprintf() since it is not very flexible and only prints physical/OS indexes.
++Fill string string up to size characters with the description of topology object obj in topology topology.

++If verbose is set, a longer description is used. Otherwise a short description is used.

++indexprefix is used to prefix the os_index attribute number of the object in the description. If NULL, the # character is used.

++

Returns:
how many characters were actually written (not including the ending \0), or -1 on error.
++
++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
hwloc_obj_type_t hwloc_obj_type_of_string const char *  string  ) 
+- +-
+- +-

Bind current process memory on the given nodeset nodeset.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported
+-
+--1 with errno set to EXDEV if the binding cannot be enforced
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_set_proc_membind (hwloc_topology_t  topology,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Return an object type from the string. ++

++

Returns:
-1 if unrecognized.
++
++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
hwloc_pid_t  pid, int hwloc_obj_type_snprintf char *restrict  string,
hwloc_const_cpuset_t  cpuset, size_t  size,
hwloc_membind_policy_t  policy, hwloc_obj_t  obj,
int  flags int  verbose
)
+- +-
+- +-

Bind given process memory on memory nodes near the given cpuset cpuset.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported
+-
+--1 with errno set to EXDEV if the binding cannot be enforced
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC int hwloc_set_proc_membind_nodeset (hwloc_topology_t  topology,
hwloc_pid_t  pid,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
int  flags 
)
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Stringify the type of a given topology object into a human-readable form. ++

++It differs from hwloc_obj_type_string() because it prints type attributes such as cache depth.

++

Returns:
how many characters were actually written (not including the ending \0), or -1 on error.
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
const char* hwloc_obj_type_string hwloc_obj_type_t  type  )  const
+- +-
+- +-

Bind given process memory on the given nodeset nodeset.

+-
Returns:
-1 with errno set to ENOSYS if the action is not supported
+-
+--1 with errno set to EXDEV if the binding cannot be enforced
+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Return a stringified topology object type. ++

++

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00045.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00045.html +--- hwloc-1.1/doc/doxygen-doc/html/a00045.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00045.html 2010-12-31 23:48:22.572910623 +0100 +@@ -1,105 +1,408 @@ +- +- +- +- +-Hardware Locality (hwloc): Object Type Helpers +- +- +- +- +- +- +-
+- +-
+-

Object Type Helpers

+-
+-
+- +- +- +- +- +- +-

+-Functions

static __hwloc_inline int
+-__hwloc_attribute_pure 
hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the depth of objects of type type or below.
static __hwloc_inline int
+-__hwloc_attribute_pure 
hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the depth of objects of type type or above.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline int __hwloc_attribute_pure hwloc_get_type_or_above_depth (hwloc_topology_t  topology,
hwloc_obj_type_t  type 
) [static]
+-
+-
+- +-

Returns the depth of objects of type type or above.

+-

If no object of this type is present on the underlying architecture, the function returns the depth of the first "present" object typically containing type.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline int __hwloc_attribute_pure hwloc_get_type_or_below_depth (hwloc_topology_t  topology,
hwloc_obj_type_t  type 
) [static]
+-
+-
+- +-

Returns the depth of objects of type type or below.

+-

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 type.

+- +-
+-
+-
+- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00046.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00046.html +--- hwloc-1.1/doc/doxygen-doc/html/a00046.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00046.html 2010-12-31 23:48:22.526904994 +0100 +@@ -1,367 +1,1087 @@ +- +- +- +- +-Hardware Locality (hwloc): Basic Traversal Helpers +- +- +- +- +- +- +-
+- +-
+-

Basic Traversal Helpers

+-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++Hardware Locality (hwloc): Memory binding ++ ++ ++ ++ ++

Memory binding

+-Functions

static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_root_obj (hwloc_topology_t topology)
 Returns the top-object of the topology-tree.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_ancestor_obj_by_depth (hwloc_topology_t topology __hwloc_attribute_unused, unsigned depth, hwloc_obj_t obj)
 Returns the ancestor object of obj at depth depth.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_ancestor_obj_by_type (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_type_t type, hwloc_obj_t obj)
 Returns the ancestor object of obj with type type.
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_by_depth (hwloc_topology_t topology, unsigned depth, hwloc_obj_t prev)
 Returns the next object at depth depth.
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)
 Returns the next object of type type.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_pu_obj_by_os_index (hwloc_topology_t topology, unsigned os_index)
 Returns the object of type HWLOC_OBJ_PU with os_index.
static __hwloc_inline hwloc_obj_t hwloc_get_next_child (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t parent, hwloc_obj_t prev)
 Return the next child.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_common_ancestor_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj1, hwloc_obj_t obj2)
 Returns the common parent object to objects lvl1 and lvl2.
static __hwloc_inline int
+-__hwloc_attribute_pure 
hwloc_obj_is_in_subtree (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj, hwloc_obj_t subtree_root)
 Returns true if _obj_ is inside the subtree beginning with subtree_root.
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +

Enumerations

enum  hwloc_membind_policy_t {
++  HWLOC_MEMBIND_DEFAULT, ++HWLOC_MEMBIND_FIRSTTOUCH, ++HWLOC_MEMBIND_BIND, ++HWLOC_MEMBIND_INTERLEAVE, ++
++  HWLOC_MEMBIND_REPLICATE, ++HWLOC_MEMBIND_NEXTTOUCH ++
++ }
 Memory binding policy. More...
enum  hwloc_membind_flags_t {
++  HWLOC_MEMBIND_PROCESS, ++HWLOC_MEMBIND_THREAD, ++HWLOC_MEMBIND_STRICT, ++HWLOC_MEMBIND_MIGRATE, ++
++  HWLOC_MEMBIND_NOCPUBIND ++
++ }
 Memory binding flags. More...

Functions

int hwloc_set_membind_nodeset (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind current process memory on the given nodeset nodeset.
int hwloc_set_membind (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind current process memory on memory nodes near the given cpuset cpuset.
int hwloc_get_membind_nodeset (hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in nodeset nodeset.
int hwloc_get_membind (hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in cpuset cpuset.
int hwloc_set_proc_membind_nodeset (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind given process memory on the given nodeset nodeset.
int hwloc_set_proc_membind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind given process memory on memory nodes near the given cpuset cpuset.
int hwloc_get_proc_membind_nodeset (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in nodeset nodeset.
int hwloc_get_proc_membind (hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get current process memory binding in cpuset cpuset.
int hwloc_set_area_membind_nodeset (hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Bind some memory range on the given nodeset nodeset.
int hwloc_set_area_membind (hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Bind some memory range on memory nodes near the given cpuset cpuset.
int hwloc_get_area_membind_nodeset (hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags)
 Get some memory range memory binding in nodeset nodeset.
int hwloc_get_area_membind (hwloc_topology_t topology, const void *addr, size_t len, hwloc_cpuset_t cpuset, hwloc_membind_policy_t *policy, int flags)
 Get some memory range memory binding in cpuset cpuset.
void * hwloc_alloc (hwloc_topology_t topology, size_t len)
 Allocate some memory.
void * hwloc_alloc_membind_nodeset (hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on the given nodeset nodeset.
void * hwloc_alloc_membind (hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on memory nodes near the given cpuset cpuset.
int hwloc_free (hwloc_topology_t topology, void *addr, size_t len)
 Free some memory allocated by hwloc_alloc() or hwloc_alloc_membind().
+-

Function Documentation

+- +-
+-
+- ++

Detailed Description

++
Note:
Not all OSes support all ways to bind existing allocated memory (migration), future memory allocation, explicit memory allocation, etc. and the corresponding binding functions may fail. -1 is returned and errno is set to ENOSYS when it is not possible to bind the requested kind of object processes/threads). errno is set to EXDEV when the requested cpuset can not be enforced (e.g. some systems only allow one NUMA node).
++The most portable version that should be preferred over the others, whenever possible, is

++

 hwloc_alloc_membind_policy(topology, size, set, HWLOC_MEMBIND_DEFAULT, 0),
++

++which will try to allocate new data bound to the given set, possibly by changing the current memory binding policy, or at worse allocate memory without binding it at all. Since HWLOC_MEMBIND_STRICT is not given, this will even not fail unless a mere malloc() itself would fail, i.e. ENOMEM.

++Each binding is available with a CPU set argument or a NUMA memory node set argument. The name of the latter ends with _nodeset. It is also possible to convert between CPU set and node set using hwloc_cpuset_to_nodeset or hwloc_cpuset_from_nodeset.

++

Note:
On some OSes, memory binding may have effects on CPU binding, see HWLOC_MEMBIND_NOCPUBIND
++

Enumeration Type Documentation

++

++

++ ++ ++ ++
++ + +- +- +- +- ++ + ++
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_ancestor_obj_by_depth (hwloc_topology_t topology  __hwloc_attribute_unused, enum hwloc_membind_flags_t
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Memory binding flags. ++

++These flags can be used to refine the binding policy.

++

Note:
Not all systems support all kinds of binding.
++
Enumeration values:
++ ++ ++ ++ ++ ++ ++
HWLOC_MEMBIND_PROCESS  ++Set policy for all threads of the current (possibly multithreaded) process.
HWLOC_MEMBIND_THREAD  ++Set policy for the current thread of the current process.
HWLOC_MEMBIND_STRICT  ++Request strict binding from the OS. The function will fail if the binding can not be completely enforced.
HWLOC_MEMBIND_MIGRATE  ++Migrate existing allocated memory. ++

++If memory can not be migrated and the STRICT flag is passed, an error will be returned.

HWLOC_MEMBIND_NOCPUBIND  ++Avoid any effect on CPU binding. ++

++On some OSes, some memory binding function would also bind the application on the corresponding CPUs. 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 on CPUs. This will however reduce the support of memory bindings, i.e. potentially return ENOSYS in some cases.

++
++
++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ + ++
unsigned  depth, enum hwloc_membind_policy_t
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Memory binding policy. ++

++These can be used to choose the binding policy.

++Note that not all systems support all kinds of binding.

Enumeration values:
++ ++ ++ ++ ++ ++ ++ ++
HWLOC_MEMBIND_DEFAULT  ++Reset the memory allocation policy to the system default.
HWLOC_MEMBIND_FIRSTTOUCH  ++Allocate memory on the given nodes, but preferably on the node where the first accessor is running.
HWLOC_MEMBIND_BIND  ++Allocate memory on the given nodes.
HWLOC_MEMBIND_INTERLEAVE  ++Allocate memory on the given nodes in a round-robin manner.
HWLOC_MEMBIND_REPLICATE  ++Replicate memory on the given nodes.
HWLOC_MEMBIND_NEXTTOUCH  ++On next touch of existing allocated memory, migrate it to the node where the memory reference happened.
++
++
++


Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
void* hwloc_alloc hwloc_topology_t  topology,
size_t  len
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Allocate some memory. ++

++This is equivalent to malloc(), except it tries to allocated page-aligned memory from the OS.

++

Note:
The allocated memory should be freed with hwloc_free().
++
++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
hwloc_obj_t  obj  void* hwloc_alloc_membind hwloc_topology_t  topology,
) [static]size_t  len,
hwloc_const_cpuset_t  cpuset,
hwloc_membind_policy_t  policy,
int  flags
+- +-
+- +-

Returns the ancestor object of obj at depth depth.

++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Allocate some memory on memory nodes near the given cpuset cpuset. ++

++

Returns:
-1 with errno set to ENOSYS if the action is not supported and HWLOC_MEMBIND_STRICT is given

++-1 with errno set to EXDEV if the binding cannot be enforced and HWLOC_MEMBIND_STRICT is given

++
Note:
The allocated memory should be freed with hwloc_free().
++ ++ ++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
void* hwloc_alloc_membind_nodeset hwloc_topology_t  topology,
size_t  len,
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_ancestor_obj_by_type (hwloc_topology_t topology  __hwloc_attribute_unused, hwloc_const_nodeset_t  nodeset,
hwloc_obj_type_t  type, hwloc_membind_policy_t  policy,
hwloc_obj_t  obj int  flags
) [static]
+- +-
+- +-

Returns the ancestor object of obj with type type.

++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Allocate some memory on the given nodeset nodeset. ++

++

Returns:
-1 with errno set to ENOSYS if the action is not supported and HWLOC_MEMBIND_STRICT is given

++-1 with errno set to EXDEV if the binding cannot be enforced and HWLOC_MEMBIND_STRICT is given

++
Note:
The allocated memory should be freed with hwloc_free().
++ ++ ++
++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_common_ancestor_obj (hwloc_topology_t topology  __hwloc_attribute_unused, int hwloc_free hwloc_topology_t  topology,
hwloc_obj_t  obj1, void *  addr,
hwloc_obj_t  obj2 size_t  len
) [static]
+- +-
+- +-

Returns the common parent object to objects lvl1 and lvl2.

++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Free some memory allocated by hwloc_alloc() or hwloc_alloc_membind(). ++

++ ++ ++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
int hwloc_get_area_membind hwloc_topology_t  topology,
const void *  addr,
size_t  len,
static __hwloc_inline hwloc_obj_t hwloc_get_next_child (hwloc_topology_t topology  __hwloc_attribute_unused, hwloc_cpuset_t  cpuset,
hwloc_obj_t  parent, hwloc_membind_policy_t policy,
hwloc_obj_t  prev int  flags
) [static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Return the next child.

+-

If prev is NULL, return the first child.

++

++Get some memory range memory binding in cpuset cpuset. ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
int hwloc_get_area_membind_nodeset hwloc_topology_t  topology,
const void *  addr,
size_t  len,
hwloc_nodeset_t  nodeset,
hwloc_membind_policy_t policy,
int  flags
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Get some memory range memory binding in nodeset nodeset. ++

++ ++ ++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
int hwloc_get_membind hwloc_topology_t  topology,
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_by_depth (hwloc_topology_t  topology, hwloc_cpuset_t  cpuset,
unsigned  depth, hwloc_membind_policy_t policy,
hwloc_obj_t  prev int  flags
) [static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Returns the next object at depth depth.

+-

If prev is NULL, return the first object at depth depth.

++

++Get current process memory binding in cpuset cpuset. ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
int hwloc_get_membind_nodeset hwloc_topology_t  topology,
hwloc_nodeset_t  nodeset,
hwloc_membind_policy_t policy,
int  flags
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Get current process memory binding in nodeset nodeset. ++

++ ++ ++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
int hwloc_get_proc_membind hwloc_topology_t  topology,
hwloc_pid_t  pid,
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_by_type (hwloc_topology_t  topology, hwloc_cpuset_t  cpuset,
hwloc_obj_type_t  type, hwloc_membind_policy_t policy,
hwloc_obj_t  prev int  flags
) [static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Returns the next object of type type.

+-

If prev is NULL, return the first object at type type. If there are multiple or no depth for given type, return NULL and let the caller fallback to hwloc_get_next_obj_by_depth().

++

++Get current process memory binding in cpuset cpuset. ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
int hwloc_get_proc_membind_nodeset hwloc_topology_t  topology,
hwloc_pid_t  pid,
hwloc_nodeset_t  nodeset,
hwloc_membind_policy_t policy,
int  flags
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Get current process memory binding in nodeset nodeset. ++

++ ++ ++

++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_pu_obj_by_os_index (hwloc_topology_t  topology, int hwloc_set_area_membind hwloc_topology_t  topology,
unsigned  os_index const void *  addr,
) [static]size_t  len,
hwloc_const_cpuset_t  cpuset,
hwloc_membind_policy_t  policy,
int  flags
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Returns the object of type HWLOC_OBJ_PU with os_index.

+-
Note:
The os_index field of object should most of the times only be used for pretty-printing purpose. Type HWLOC_OBJ_PU is the only case where os_index could actually be useful, when manually binding to processors. However, using CPU sets to hide this complexity should often be preferred.
++

++Bind some memory range on memory nodes near the given cpuset cpuset. ++

++

Returns:
-1 with errno set to ENOSYS if the action is not supported

++-1 with errno set to EXDEV if the binding cannot be enforced

++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
int hwloc_set_area_membind_nodeset hwloc_topology_t  topology,
const void *  addr,
size_t  len,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
int  flags
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Bind some memory range on the given nodeset nodeset. ++

++

Returns:
-1 with errno set to ENOSYS if the action is not supported

++-1 with errno set to EXDEV if the binding cannot be enforced

++ ++ ++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_set_membind hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset,
hwloc_membind_policy_t  policy,
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_root_obj (hwloc_topology_t  topology )  [static]int  flags
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Returns the top-object of the topology-tree.

+-

Its type is typically HWLOC_OBJ_MACHINE but it could be different for complex topologies. This function replaces the old deprecated hwloc_get_system_obj().

++

++Bind current process memory on memory nodes near the given cpuset cpuset. ++

++

Returns:
-1 with errno set to ENOSYS if the action is not supported

++-1 with errno set to EXDEV if the binding cannot be enforced

++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
int hwloc_set_membind_nodeset hwloc_topology_t  topology,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
int  flags
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Bind current process memory on the given nodeset nodeset. ++

++

Returns:
-1 with errno set to ENOSYS if the action is not supported

++-1 with errno set to EXDEV if the binding cannot be enforced

++ ++ ++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
int hwloc_set_proc_membind hwloc_topology_t  topology,
hwloc_pid_t  pid,
static __hwloc_inline int __hwloc_attribute_pure hwloc_obj_is_in_subtree (hwloc_topology_t topology  __hwloc_attribute_unused, hwloc_const_cpuset_t  cpuset,
hwloc_obj_t  obj, hwloc_membind_policy_t  policy,
hwloc_obj_t  subtree_root int  flags
) [static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Returns true if _obj_ is inside the subtree beginning with subtree_root.

++

++Bind given process memory on memory nodes near the given cpuset cpuset. ++

++

Returns:
-1 with errno set to ENOSYS if the action is not supported

++-1 with errno set to EXDEV if the binding cannot be enforced

++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
int hwloc_set_proc_membind_nodeset hwloc_topology_t  topology,
hwloc_pid_t  pid,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
int  flags
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00047.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00047.html +--- hwloc-1.1/doc/doxygen-doc/html/a00047.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00047.html 2010-12-31 23:48:22.458896673 +0100 +@@ -1,372 +1,101 @@ +- +- +- +- +-Hardware Locality (hwloc): Finding Objects Inside a CPU set +- +- +- +- +- +- +-
+- +-
+-

Finding Objects Inside a CPU set

+-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-Functions

static __hwloc_inline hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 Get the first largest object included in the given cpuset set.
HWLOC_DECLSPEC int hwloc_get_largest_objs_inside_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t *__hwloc_restrict objs, int max)
 Get the set of largest objects covering exactly a given cpuset set.
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, hwloc_obj_t prev)
 Return the next object at depth depth included in CPU set set.
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)
 Return the next object of type type included in CPU set set.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, unsigned idx)
 Return the index -th object at depth depth included in CPU set set.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, unsigned idx)
 Return the idx -th object of type type included in CPU set set.
static __hwloc_inline unsigned
+-__hwloc_attribute_pure 
hwloc_get_nbobjs_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth)
 Return the number of objects at depth depth included in CPU set set.
static __hwloc_inline int
+-__hwloc_attribute_pure 
hwloc_get_nbobjs_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type)
 Return the number of objects of type type included in CPU set set.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set 
) [static]
+-
+-
+- +-

Get the first largest object included in the given cpuset set.

+-
Returns:
the first object that is included in set and whose parent is not.
+-

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.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_get_largest_objs_inside_cpuset (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
hwloc_obj_t *__hwloc_restrict  objs,
int  max 
)
+-
+-
+- +-

Get the set of largest objects covering exactly a given cpuset set.

+-
Returns:
the number of objects returned in objs.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline unsigned __hwloc_attribute_pure hwloc_get_nbobjs_inside_cpuset_by_depth (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
unsigned  depth 
) [static]
+-
+-
+- +-

Return the number of objects at depth depth included in CPU set set.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline int __hwloc_attribute_pure hwloc_get_nbobjs_inside_cpuset_by_type (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
hwloc_obj_type_t  type 
) [static]
+-
+-
++ ++ ++Hardware Locality (hwloc): Object Type Helpers ++ ++ ++ ++ ++

Object Type Helpers

++ ++ ++ + +-

Return the number of objects of type type included in CPU set set.

+-

If no object for that type exists inside CPU set set, 0 is returned. If there are several levels with objects of that type inside CPU set set, -1 is returned.

++ ++ + +- +- +- +-
+-
+-

Functions

inline int  hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
 Returns the depth of objects of type type or below.
inline int  hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
unsigned  depth,
hwloc_obj_t  prev 
) [static]
+-
+-
+- +-

Return the next object at depth depth included in CPU set set.

+-

If prev is NULL, return the first object at depth depth included in set. The next invokation should pass the previous return value in prev so as to obtain the next object in set.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_type (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
hwloc_obj_type_t  type,
hwloc_obj_t  prev 
) [static]
+-
+-
+- +-

Return the next object of type type included in CPU set set.

+-

If there are multiple or no depth for given type, return NULL and let the caller fallback to hwloc_get_next_obj_inside_cpuset_by_depth().

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_obj_inside_cpuset_by_depth (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
 Returns the depth of objects of type type or above.
++

Function Documentation

++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
unsigned  depth, inline int hwloc_get_type_or_above_depth hwloc_topology_t  topology,
unsigned  idx hwloc_obj_type_t  type
) [static] [static]
+- +-
+- +-

Return the index -th object at depth depth included in CPU set set.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_obj_inside_cpuset_by_type (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Returns the depth of objects of type type or above. ++

++If no object of this type is present on the underlying architecture, the function returns the depth of the first "present" object typically containing type.

++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
hwloc_obj_type_t  type, inline int hwloc_get_type_or_below_depth hwloc_topology_t  topology,
unsigned  idx hwloc_obj_type_t  type
) [static] [static]
+- +-
+- +-

Return the idx -th object of type type included in CPU set set.

+-

If there are multiple or no depth for given type, return NULL and let the caller fallback to hwloc_get_obj_inside_cpuset_by_depth().

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Returns the depth of objects of type type or below. ++

++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 type.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00048.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00048.html +--- hwloc-1.1/doc/doxygen-doc/html/a00048.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00048.html 2010-12-31 23:48:22.507902669 +0100 +@@ -1,113 +1,434 @@ +- +- +- +- +-Hardware Locality (hwloc): Finding a single Object covering at least CPU set +- +- +- +- +- +- +-
+- +-
+-

Finding a single Object covering at least CPU set

+-
+-
+- +- +- +- +- +- +-

+-Functions

static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_child_covering_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set, hwloc_obj_t parent)
 Get the child covering at least CPU set set.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_obj_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 Get the lowest object covering at least CPU set set.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_child_covering_cpuset (hwloc_topology_t topology  __hwloc_attribute_unused,
hwloc_const_cpuset_t  set,
hwloc_obj_t  parent 
) [static]
+-
+-
+- +-

Get the child covering at least CPU set set.

+-
Returns:
NULL if no child matches or if set is empty.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_obj_covering_cpuset (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set 
) [static]
+-
+-
+- +-

Get the lowest object covering at least CPU set set.

+-
Returns:
NULL if no object matches or if set is empty.
+- +-
+-
+-
+- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00049.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00049.html +--- hwloc-1.1/doc/doxygen-doc/html/a00049.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00049.html 2010-12-31 23:48:22.504902301 +0100 +@@ -1,128 +1,429 @@ +- +- +- +- +-Hardware Locality (hwloc): Finding a set of similar Objects covering at least a CPU set +- +- +- +- +- +- +-
+- +-
+-

Finding a set of similar Objects covering at least a CPU set

+-
+-
+- +- +- +- +- +- +-

+-Functions

static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, hwloc_obj_t prev)
 Iterate through same-depth objects covering at least CPU set set.
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)
 Iterate through same-type objects covering at least CPU set set.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
unsigned  depth,
hwloc_obj_t  prev 
) [static]
+-
+-
+- +-

Iterate through same-depth objects covering at least CPU set set.

+-

If object prev is NULL, return the first object at depth depth covering at least part of CPU set set. The next invokation should pass the previous return value in prev so as to obtain the next object covering at least another part of set.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set,
hwloc_obj_type_t  type,
hwloc_obj_t  prev 
) [static]
+-
+-
+- +-

Iterate through same-type objects covering at least CPU set set.

+-

If object prev is NULL, return the first object of type type covering at least part of CPU set set. The next invokation should pass the previous return value in prev so as to obtain the next object of type type covering at least another part of set.

+-

If there are no or multiple depths for type type, NULL is returned. The caller may fallback to hwloc_get_next_obj_covering_cpuset_by_depth() for each depth.

+- +-
+-
+-
+- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00050.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00050.html +--- hwloc-1.1/doc/doxygen-doc/html/a00050.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00050.html 2010-12-31 23:48:22.484899855 +0100 +@@ -1,107 +1,111 @@ +- +- +- +- +-Hardware Locality (hwloc): Cache-specific Finding Helpers +- +- +- +- +- +- +-
+- +-
+-

Cache-specific Finding Helpers

+-
+-
+- +- +- +- +- +- ++ ++ ++Hardware Locality (hwloc): Finding a single Object covering at least CPU set ++ ++ ++ ++ ++

Finding a single Object covering at least CPU set

+-Functions

static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 Get the first cache covering a cpuset set.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj)
 Get the first cache shared between an object and somebody else.
++ ++ ++ ++ ++ ++ ++ ++ +

Functions

inline hwloc_obj_t
++ 
hwloc_get_child_covering_cpuset (hwloc_topology_t topology , hwloc_const_cpuset_t set, hwloc_obj_t parent)
 Get the child covering at least CPU set set.
inline hwloc_obj_t
++ 
hwloc_get_obj_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 Get the lowest object covering at least CPU set set.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++

Function Documentation

++

++

static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_cache_covering_cpuset (hwloc_topology_t  topology,
hwloc_const_cpuset_t  set 
) [static]
++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_obj_t hwloc_get_child_covering_cpuset hwloc_topology_t topology  ,
hwloc_const_cpuset_t  set,
hwloc_obj_t  parent
[static]
+- +-
+- +-

Get the first cache covering a cpuset set.

+-
Returns:
NULL if no cache matches
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++

++Get the child covering at least CPU set set. ++

++

Returns:
NULL if no child matches or if set is empty.
++ ++ ++
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology  __hwloc_attribute_unused,
hwloc_obj_t  obj 
) [static]
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_obj_t hwloc_get_obj_covering_cpuset hwloc_topology_t  topology,
hwloc_const_cpuset_t  set
[static]
+- +-
+- +-

Get the first cache shared between an object and somebody else.

+-
Returns:
NULL if no cache matches
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00051.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00051.html +--- hwloc-1.1/doc/doxygen-doc/html/a00051.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00051.html 2010-12-31 23:48:22.581911724 +0100 +@@ -1,186 +1,126 @@ +- +- +- +- +-Hardware Locality (hwloc): Advanced Traversal Helpers +- +- +- +- +- +- +-
+- +-
+-

Advanced Traversal Helpers

+-
+-
+- +- +- +- +- +- +- +- +-

+-Functions

HWLOC_DECLSPEC unsigned hwloc_get_closest_objs (hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *__hwloc_restrict objs, unsigned max)
 Do a depth-first traversal of the topology to find and sort.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_obj_below_by_type (hwloc_topology_t topology, hwloc_obj_type_t type1, unsigned idx1, hwloc_obj_type_t type2, unsigned idx2)
 Find an object below another object, both specified by types and indexes.
static __hwloc_inline
+-hwloc_obj_t
+-__hwloc_attribute_pure 
hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)
 Find an object below a chain of objects specified by types and indexes.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC unsigned hwloc_get_closest_objs (hwloc_topology_t  topology,
hwloc_obj_t  src,
hwloc_obj_t *__hwloc_restrict  objs,
unsigned  max 
)
+-
+-
++ ++ ++Hardware Locality (hwloc): Finding a set of similar Objects covering at least a CPU set ++ ++ ++ ++ ++

Finding a set of similar Objects covering at least a CPU set

++ ++ ++ + +-

Do a depth-first traversal of the topology to find and sort.

+-

all objects that are at the same depth than src. Report in objs up to max physically closest ones to src.

+-
Returns:
the number of objects returned in objs.
++ ++ + +- +- +- +-
+-
+-

Functions

inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, hwloc_obj_t prev)
 Iterate through same-depth objects covering at least CPU set set.
inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)
++ ++
 Iterate through same-type objects covering at least CPU set set.
++

Function Documentation

++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_obj_below_array_by_type (hwloc_topology_t  topology, inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth hwloc_topology_t  topology,
int  nr, hwloc_const_cpuset_t  set,
hwloc_obj_type_t typev, unsigned  depth,
unsigned *  idxv hwloc_obj_t  prev
) [static] [static]
+- +-
+- +-

Find an object below a chain of objects specified by types and indexes.

+-

This is a generalized version of hwloc_get_obj_below_by_type().

+-

Arrays typev and idxv must contain nr types and indexes.

+-

Start from the top system object and walk the arrays typev and idxv. For each type and index couple in the arrays, look under the previously found object to find the index-th object of the given type. Indexes are specified within the parent, not withing the entire system.

+-

For instance, if nr is 3, typev contains NODE, SOCKET and CORE, and idxv contains 0, 1 and 2, return the third core object below the second socket below the first NUMA node.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure hwloc_get_obj_below_by_type (hwloc_topology_t  topology,
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Iterate through same-depth objects covering at least CPU set set. ++

++If object prev is NULL, return the first object at depth depth covering at least part of CPU set set. The next invokation should pass the previous return value in prev so as to obtain the next object covering at least another part of set.

++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
hwloc_obj_type_t  type1, inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type hwloc_topology_t  topology,
unsigned  idx1, hwloc_const_cpuset_t  set,
hwloc_obj_type_t  type2, hwloc_obj_type_t  type,
unsigned  idx2 hwloc_obj_t  prev
) [static] [static]
+- +-
+- +-

Find an object below another object, both specified by types and indexes.

+-

Start from the top system object and find object of type type1 and index idx1. Then look below this object and find another object of type type2 and index idx2. Indexes are specified within the parent, not withing the entire system.

+-

For instance, if type1 is SOCKET, idx1 is 2, type2 is CORE and idx2 is 3, return the fourth core object below the third socket.

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Iterate through same-type objects covering at least CPU set set. ++

++If object prev is NULL, return the first object of type type covering at least part of CPU set set. The next invokation should pass the previous return value in prev so as to obtain the next object of type type covering at least another part of set.

++If there are no or multiple depths for type type, NULL is returned. The caller may fallback to hwloc_get_next_obj_covering_cpuset_by_depth() for each depth.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00052.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00052.html +--- hwloc-1.1/doc/doxygen-doc/html/a00052.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00052.html 2010-12-31 23:48:22.505902423 +0100 +@@ -1,245 +1,105 @@ +- +- +- +- +-Hardware Locality (hwloc): Binding Helpers +- +- +- +- +- +- +-
+- +-
+-

Binding Helpers

+-
+-
+- +- +- +- +- +- +- +- +- +-

+-Functions

static __hwloc_inline void hwloc_distributev (hwloc_topology_t topology, hwloc_obj_t *root, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
 Distribute n items over the topology under root.
static __hwloc_inline void hwloc_distribute (hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
static __hwloc_inline void * hwloc_alloc_membind_policy_nodeset (hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on the given nodeset nodeset.
static __hwloc_inline void * hwloc_alloc_membind_policy (hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on the memory nodes near given cpuset cpuset.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline void* hwloc_alloc_membind_policy (hwloc_topology_t  topology,
size_t  len,
hwloc_const_cpuset_t  cpuset,
hwloc_membind_policy_t  policy,
int  flags 
) [static]
+-
+-
++ ++ ++Hardware Locality (hwloc): Cache-specific Finding Helpers ++ ++ ++ ++ ++

Cache-specific Finding Helpers

++ ++ ++ ++ ++ ++ + +-

Allocate some memory on the memory nodes near given cpuset cpuset.

+-

This is similar to hwloc_alloc_membind_policy_nodeset, but for a given cpuset.

+- +- +- +- +-
+-
+-

Functions

inline hwloc_obj_t
++ 
hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
 Get the first cache covering a cpuset set.
inline hwloc_obj_t
++ 
hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology , hwloc_obj_t obj)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline void* hwloc_alloc_membind_policy_nodeset (hwloc_topology_t  topology,
size_t  len,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
int  flags 
) [static]
+-
+-
+- +-

Allocate some memory on the given nodeset nodeset.

+-

This is similar to hwloc_alloc_membind 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.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++
static __hwloc_inline void hwloc_distribute (hwloc_topology_t  topology,
hwloc_obj_t  root,
hwloc_cpuset_t cpuset,
unsigned  n,
unsigned  until 
) [static]
 Get the first cache shared between an object and somebody else.
++

Function Documentation

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_obj_t hwloc_get_cache_covering_cpuset hwloc_topology_t  topology,
hwloc_const_cpuset_t  set
[static]
+- +-
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline void hwloc_distributev (hwloc_topology_t  topology,
hwloc_obj_t roots,
unsigned  n_roots,
hwloc_cpuset_t cpuset,
unsigned  n,
unsigned  until 
) [static]
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get the first cache covering a cpuset set. ++

++

Returns:
NULL if no cache matches
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_obj_t hwloc_get_shared_cache_covering_obj hwloc_topology_t topology  ,
hwloc_obj_t  obj
[static]
+- +-
+- +-

Distribute n items over the topology under root.

+-

Distribute n items over the topology under roots.

+-

Array cpuset will be filled with n cpusets recursively distributed linearly over the topology under root, down to depth until (which can be MAX_INT to distribute down to the finest level).

+-

This is typically useful when an application wants to distribute n threads over a machine, giving each of them as much private cache as possible and keeping them locally in number order.

+-

The caller may typically want to also call hwloc_bitmap_singlify() before binding a thread so that it does not move at all.

+-

This is the same as hwloc_distribute, but takes an array of roots instead of just one root.

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get the first cache shared between an object and somebody else. ++

++

Returns:
NULL if no cache matches
++
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00053.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00053.html +--- hwloc-1.1/doc/doxygen-doc/html/a00053.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00053.html 2010-12-31 23:48:22.571910501 +0100 +@@ -1,133 +1,193 @@ +- +- +- +- +-Hardware Locality (hwloc): Cpuset Helpers +- +- +- +- +- +- +-
+- +-
+-

Cpuset Helpers

+-
+-
+- +- +- +- +- +- +- +- +-

+-Functions

static __hwloc_inline
+-hwloc_const_cpuset_t
+-__hwloc_attribute_pure 
hwloc_topology_get_complete_cpuset (hwloc_topology_t topology)
static __hwloc_inline
+-hwloc_const_cpuset_t
+-__hwloc_attribute_pure 
hwloc_topology_get_topology_cpuset (hwloc_topology_t topology)
static __hwloc_inline
+-hwloc_const_cpuset_t
+-__hwloc_attribute_pure 
hwloc_topology_get_online_cpuset (hwloc_topology_t topology)
 Get online CPU set.
static __hwloc_inline
+-hwloc_const_cpuset_t
+-__hwloc_attribute_pure 
hwloc_topology_get_allowed_cpuset (hwloc_topology_t topology)
 Get allowed CPU set.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +-
static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure hwloc_topology_get_allowed_cpuset (hwloc_topology_t  topology )  [static]
+-
+-
++ ++ ++Hardware Locality (hwloc): Advanced Traversal Helpers ++ ++ ++ ++ ++

Advanced Traversal Helpers

++ ++ ++ ++ ++ ++ ++ ++ ++ + +-

Get allowed CPU set.

+-
Returns:
the CPU set of allowed logical processors of the system. If the topology is the result of a combination of several systems, NULL is returned.
+-
Note:
The returned cpuset is not newly allocated and should thus not be changed or freed, hwloc_cpuset_dup must be used to obtain a local copy.
+- +- +- +- +-
+-
+-

Functions

unsigned hwloc_get_closest_objs (hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *restrict objs, unsigned max)
 Do a depth-first traversal of the topology to find and sort.
inline hwloc_obj_t
++ 
hwloc_get_obj_below_by_type (hwloc_topology_t topology, hwloc_obj_type_t type1, unsigned idx1, hwloc_obj_type_t type2, unsigned idx2)
 Find an object below another object, both specified by types and indexes.
inline hwloc_obj_t
++ 
hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)
+- +- +- +- +- +- +- ++ ++
static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure hwloc_topology_get_complete_cpuset (hwloc_topology_t  topology )  [static]
 Find an object below a chain of objects specified by types and indexes.
++

Function Documentation

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
unsigned hwloc_get_closest_objs hwloc_topology_t  topology,
hwloc_obj_t  src,
hwloc_obj_t *restrict  objs,
unsigned  max
+- +-
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure hwloc_topology_get_online_cpuset (hwloc_topology_t  topology )  [static]
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Do a depth-first traversal of the topology to find and sort. ++

++all objects that are at the same depth than src. Report in objs up to max physically closest ones to src.

++

Returns:
the number of objects returned in objs.
++
++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_obj_t hwloc_get_obj_below_array_by_type hwloc_topology_t  topology,
int  nr,
hwloc_obj_type_t typev,
unsigned *  idxv
[static]
+- +-
+- +-

Get online CPU set.

+-
Returns:
the CPU set of online logical processors of the system. If the topology is the result of a combination of several systems, NULL is returned.
+-
Note:
The returned cpuset is not newly allocated and should thus not be changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure hwloc_topology_get_topology_cpuset (hwloc_topology_t  topology )  [static]
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Find an object below a chain of objects specified by types and indexes. ++

++This is a generalized version of hwloc_get_obj_below_by_type().

++Arrays typev and idxv must contain nr types and indexes.

++Start from the top system object and walk the arrays typev and idxv. For each type and index couple in the arrays, look under the previously found object to find the index-th object of the given type. Indexes are specified within the parent, not withing the entire system.

++For instance, if nr is 3, typev contains NODE, SOCKET and CORE, and idxv contains 0, 1 and 2, return the third core object below the second socket below the first NUMA node.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_obj_t hwloc_get_obj_below_by_type hwloc_topology_t  topology,
hwloc_obj_type_t  type1,
unsigned  idx1,
hwloc_obj_type_t  type2,
unsigned  idx2
[static]
+- +-
+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Find an object below another object, both specified by types and indexes. ++

++Start from the top system object and find object of type type1 and index idx1. Then look below this object and find another object of type type2 and index idx2. Indexes are specified within the parent, not withing the entire system.

++For instance, if type1 is SOCKET, idx1 is 2, type2 is CORE and idx2 is 3, return the fourth core object below the third socket.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00054.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00054.html +--- hwloc-1.1/doc/doxygen-doc/html/a00054.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00054.html 2010-12-31 23:48:22.495901200 +0100 +@@ -1,107 +1,260 @@ +- +- +- +- +-Hardware Locality (hwloc): Nodeset Helpers +- +- +- +- +- +- +-
+- +-
+-

Nodeset Helpers

+-
+-
+- +- +- +- +- +- +-

+-Functions

static __hwloc_inline
+-hwloc_const_nodeset_t
+-__hwloc_attribute_pure 
hwloc_topology_get_complete_nodeset (hwloc_topology_t topology)
static __hwloc_inline
+-hwloc_const_nodeset_t
+-__hwloc_attribute_pure 
hwloc_topology_get_topology_nodeset (hwloc_topology_t topology)
static __hwloc_inline
+-hwloc_const_nodeset_t
+-__hwloc_attribute_pure 
hwloc_topology_get_allowed_nodeset (hwloc_topology_t topology)
 Get allowed node set.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- ++ ++ ++Hardware Locality (hwloc): Binding Helpers ++ ++ ++ ++ ++

Binding Helpers

static __hwloc_inline hwloc_const_nodeset_t __hwloc_attribute_pure hwloc_topology_get_allowed_nodeset (hwloc_topology_t  topology )  [static]
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

inline void hwloc_distributev (hwloc_topology_t topology, hwloc_obj_t *root, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
 Distribute n items over the topology under root.
inline void hwloc_distribute (hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
inline void * hwloc_alloc_membind_policy_nodeset (hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on the given nodeset nodeset.
inline void * hwloc_alloc_membind_policy (hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
 Allocate some memory on the memory nodes near given cpuset cpuset.
++

Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline void* hwloc_alloc_membind_policy hwloc_topology_t  topology,
size_t  len,
hwloc_const_cpuset_t  cpuset,
hwloc_membind_policy_t  policy,
int  flags
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Allocate some memory on the memory nodes near given cpuset cpuset. ++

++This is similar to hwloc_alloc_membind_policy_nodeset, but for a given cpuset.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline void* hwloc_alloc_membind_policy_nodeset hwloc_topology_t  topology,
size_t  len,
hwloc_const_nodeset_t  nodeset,
hwloc_membind_policy_t  policy,
int  flags
[static]
+- +-
++
++ ++ ++ ++
++   ++ + +-

Get allowed node set.

+-
Returns:
the node set of allowed memory of the system. If the topology is the result of a combination of several systems, NULL is returned.
+-
Note:
The returned nodeset is not newly allocated and should thus not be changed or freed, hwloc_nodeset_dup must be used to obtain a local copy.
+- +- +- +- +-
+-
+- +- +- +- +- +- +- +- ++

++Allocate some memory on the given nodeset nodeset. ++

++This is similar to hwloc_alloc_membind 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. ++

++
static __hwloc_inline hwloc_const_nodeset_t __hwloc_attribute_pure hwloc_topology_get_complete_nodeset (hwloc_topology_t  topology )  [static]
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline void hwloc_distribute hwloc_topology_t  topology,
hwloc_obj_t  root,
hwloc_cpuset_t cpuset,
unsigned  n,
unsigned  until
[static]
+- +-
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- +- +- +- +- +- +- +- ++

++ ++

++
static __hwloc_inline hwloc_const_nodeset_t __hwloc_attribute_pure hwloc_topology_get_topology_nodeset (hwloc_topology_t  topology )  [static]
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline void hwloc_distributev hwloc_topology_t  topology,
hwloc_obj_t roots,
unsigned  n_roots,
hwloc_cpuset_t cpuset,
unsigned  n,
unsigned  until
[static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00055.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00055.html +--- hwloc-1.1/doc/doxygen-doc/html/a00055.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00055.html 2010-12-31 23:48:22.508902791 +0100 +@@ -1,196 +1,151 @@ +- +- +- +- +-Hardware Locality (hwloc): Conversion between cpuset and nodeset +- +- +- +- +- +- +-
+- +-
+-

Conversion between cpuset and nodeset

+-
+-
+- +- +- +- +- +- +- +- +- +- +-

+-Functions

static __hwloc_inline void hwloc_cpuset_to_nodeset (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_nodeset_t nodeset)
 Convert a CPU set into a NUMA node set and handle non-NUMA cases.
static __hwloc_inline void hwloc_cpuset_to_nodeset_strict (struct hwloc_topology *topology, hwloc_const_cpuset_t cpuset, hwloc_nodeset_t nodeset)
 Convert a CPU set into a NUMA node set without handling non-NUMA cases.
static __hwloc_inline void hwloc_cpuset_from_nodeset (hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_const_nodeset_t nodeset)
 Convert a NUMA node set into a CPU set and handle non-NUMA cases.
static __hwloc_inline void hwloc_cpuset_from_nodeset_strict (struct hwloc_topology *topology, hwloc_cpuset_t cpuset, hwloc_const_nodeset_t nodeset)
 Convert a NUMA node set into a CPU set without handling non-NUMA cases.
+-

Detailed Description

+-

There are two semantics for converting cpusets to nodesets depending on how non-NUMA machines are handled.

+-

When manipulating nodesets for memory binding, non-NUMA machines should be considered as having a single NUMA node. The standard conversion routines below should be used so that marking the first bit of the nodeset means that memory should be bound to a non-NUMA whole machine.

+-

When manipulating nodesets as an actual list of NUMA nodes without any need to handle memory binding on non-NUMA machines, the strict conversion routines may be used instead.

+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline void hwloc_cpuset_from_nodeset (hwloc_topology_t  topology,
hwloc_cpuset_t  cpuset,
hwloc_const_nodeset_t  nodeset 
) [static]
+-
+-
++ ++ ++Hardware Locality (hwloc): Cpuset Helpers ++ ++ ++ ++ ++

Cpuset Helpers

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +-

Convert a NUMA node set into a CPU set and handle non-NUMA cases.

+-

If the topology contains no NUMA nodes, the machine is considered as a single memory node, and the following behavior is used: If nodeset is empty, cpuset will be emptied as well. Otherwise cpuset will be entirely filled. This is useful for manipulating memory binding sets.

+- +- +- +- +-
+-
+-

Functions

inline hwloc_const_cpuset_t
++ 
hwloc_topology_get_complete_cpuset (hwloc_topology_t topology)
inline hwloc_const_cpuset_t
++ 
hwloc_topology_get_topology_cpuset (hwloc_topology_t topology)
inline hwloc_const_cpuset_t
++ 
hwloc_topology_get_online_cpuset (hwloc_topology_t topology)
 Get online CPU set.
inline hwloc_const_cpuset_t
++ 
hwloc_topology_get_allowed_cpuset (hwloc_topology_t topology)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++
static __hwloc_inline void hwloc_cpuset_from_nodeset_strict (struct hwloc_topology *  topology,
hwloc_cpuset_t  cpuset,
hwloc_const_nodeset_t  nodeset 
) [static]
 Get allowed CPU set.
++

Function Documentation

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_const_cpuset_t hwloc_topology_get_allowed_cpuset hwloc_topology_t  topology  )  [static]
+- +-
+- +-

Convert a NUMA node set into a CPU set without handling non-NUMA cases.

+-

This is the strict variant of hwloc_cpuset_from_nodeset. It does not fix non-NUMA cases. If the topology contains some NUMA nodes, behave exactly the same. However, if the topology contains no NUMA nodes, return an empty cpuset.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline void hwloc_cpuset_to_nodeset (hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset,
hwloc_nodeset_t  nodeset 
) [static]
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get allowed CPU set. ++

++

Returns:
the CPU set of allowed logical processors of the system. If the topology is the result of a combination of several systems, NULL is returned.
++
Note:
The returned cpuset is not newly allocated and should thus not be changed or freed, hwloc_cpuset_dup must be used to obtain a local copy.
++
++

++ ++ ++ + +-

Convert the beginning part of bitmap bitmap into unsigned long mask.

++ + +- +- +- +-
+-
+-
++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset hwloc_topology_t  topology  )  [static]
+- +-
+- +-

Convert a CPU set into a NUMA node set and handle non-NUMA cases.

+-

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.

+-

If the topology contains no NUMA nodes, the machine is considered as a single memory node, and the following behavior is used: If cpuset is empty, nodeset will be emptied as well. Otherwise nodeset will be entirely filled.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline void hwloc_cpuset_to_nodeset_strict (struct hwloc_topology *  topology,
hwloc_const_cpuset_t  cpuset,
hwloc_nodeset_t  nodeset 
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++
inline hwloc_const_cpuset_t hwloc_topology_get_online_cpuset hwloc_topology_t  topology  )  [static]
) [static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get online CPU set. ++

++

Returns:
the CPU set of online logical processors of the system. If the topology is the result of a combination of several systems, NULL is returned.
++
Note:
The returned cpuset is not newly allocated and should thus not be changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
++
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_const_cpuset_t hwloc_topology_get_topology_cpuset hwloc_topology_t  topology  )  [static]
+- +-
+- +-

Convert a CPU set into a NUMA node set without handling non-NUMA cases.

+-

This is the strict variant of hwloc_cpuset_to_nodeset. It does not fix non-NUMA cases. If the topology contains some NUMA nodes, behave exactly the same. However, if the topology contains no NUMA nodes, return an empty nodeset.

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00056.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00056.html +--- hwloc-1.1/doc/doxygen-doc/html/a00056.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00056.html 2010-12-31 23:48:22.495901200 +0100 +@@ -1,1395 +1,115 @@ +- +- +- +- +-Hardware Locality (hwloc): The bitmap API +- +- +- +- +- +- +-
+- +-
+-

The bitmap API

+-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-Defines

#define hwloc_bitmap_foreach_begin(id, bitmap)
 Loop macro iterating on bitmap bitmap.
#define hwloc_bitmap_foreach_end()
 End of loop. Needs a terminating ';'.

+-Typedefs

typedef struct hwloc_bitmap_s * hwloc_bitmap_t
 Set of bits represented as an opaque pointer to an internal bitmap.
typedef struct hwloc_bitmap_s * hwloc_const_bitmap_t

+-Functions

HWLOC_DECLSPEC hwloc_bitmap_t hwloc_bitmap_alloc (void) __hwloc_attribute_malloc
 Allocate a new empty bitmap.
HWLOC_DECLSPEC hwloc_bitmap_t hwloc_bitmap_alloc_full (void) __hwloc_attribute_malloc
 Allocate a new full bitmap.
HWLOC_DECLSPEC void hwloc_bitmap_free (hwloc_bitmap_t bitmap)
 Free bitmap bitmap.
HWLOC_DECLSPEC hwloc_bitmap_t hwloc_bitmap_dup (hwloc_const_bitmap_t bitmap) __hwloc_attribute_malloc
 Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.
HWLOC_DECLSPEC void hwloc_bitmap_copy (hwloc_bitmap_t dst, hwloc_const_bitmap_t src)
 Copy the contents of bitmap src into the already allocated bitmap dst.
HWLOC_DECLSPEC int hwloc_bitmap_snprintf (char *__hwloc_restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)
 Stringify a bitmap.
HWLOC_DECLSPEC int hwloc_bitmap_asprintf (char **strp, hwloc_const_bitmap_t bitmap)
 Stringify a bitmap into a newly allocated string.
HWLOC_DECLSPEC int hwloc_bitmap_sscanf (hwloc_bitmap_t bitmap, const char *__hwloc_restrict string)
 Parse a bitmap string and stores it in bitmap bitmap.
HWLOC_DECLSPEC int hwloc_bitmap_taskset_snprintf (char *__hwloc_restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)
 Stringify a bitmap in the taskset-specific format.
HWLOC_DECLSPEC int hwloc_bitmap_taskset_asprintf (char **strp, hwloc_const_bitmap_t bitmap)
 Stringify a bitmap into a newly allocated taskset-specific string.
HWLOC_DECLSPEC int hwloc_bitmap_taskset_sscanf (hwloc_bitmap_t bitmap, const char *__hwloc_restrict string)
 Parse a taskset-specific bitmap string and stores it in bitmap bitmap.
HWLOC_DECLSPEC void hwloc_bitmap_zero (hwloc_bitmap_t bitmap)
 Empty the bitmap bitmap.
HWLOC_DECLSPEC void hwloc_bitmap_fill (hwloc_bitmap_t bitmap)
 Fill bitmap bitmap with all possible indexes (even if those objects don't exist or are otherwise unavailable).
HWLOC_DECLSPEC void hwloc_bitmap_only (hwloc_bitmap_t bitmap, unsigned id)
 Empty the bitmap bitmap and add bit id.
HWLOC_DECLSPEC void hwloc_bitmap_allbut (hwloc_bitmap_t bitmap, unsigned id)
 Fill the bitmap and clear the index id.
HWLOC_DECLSPEC void hwloc_bitmap_from_ulong (hwloc_bitmap_t bitmap, unsigned long mask)
 Setup bitmap bitmap from unsigned long mask.
HWLOC_DECLSPEC void hwloc_bitmap_from_ith_ulong (hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)
 Setup bitmap bitmap from unsigned long mask used as i -th subset.
HWLOC_DECLSPEC void hwloc_bitmap_set (hwloc_bitmap_t bitmap, unsigned id)
 Add index id in bitmap bitmap.
HWLOC_DECLSPEC void hwloc_bitmap_set_range (hwloc_bitmap_t bitmap, unsigned begin, unsigned end)
 Add indexess from begin to end in bitmap bitmap.
HWLOC_DECLSPEC void hwloc_bitmap_set_ith_ulong (hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)
 Replace i -th subset of bitmap bitmap with unsigned long mask.
HWLOC_DECLSPEC void hwloc_bitmap_clr (hwloc_bitmap_t bitmap, unsigned id)
 Remove index id from bitmap bitmap.
HWLOC_DECLSPEC void hwloc_bitmap_clr_range (hwloc_bitmap_t bitmap, unsigned begin, unsigned end)
 Remove index from begin to end in bitmap bitmap.
HWLOC_DECLSPEC void hwloc_bitmap_singlify (hwloc_bitmap_t bitmap)
 Keep a single index among those set in bitmap bitmap.
HWLOC_DECLSPEC unsigned long hwloc_bitmap_to_ulong (hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure
 Convert the beginning part of bitmap bitmap into unsigned long mask.
HWLOC_DECLSPEC unsigned long hwloc_bitmap_to_ith_ulong (hwloc_const_bitmap_t bitmap, unsigned i) __hwloc_attribute_pure
 Convert the i -th subset of bitmap bitmap into unsigned long mask.
HWLOC_DECLSPEC int hwloc_bitmap_isset (hwloc_const_bitmap_t bitmap, unsigned id) __hwloc_attribute_pure
 Test whether index id is part of bitmap bitmap.
HWLOC_DECLSPEC int hwloc_bitmap_iszero (hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure
 Test whether bitmap bitmap is empty.
HWLOC_DECLSPEC int hwloc_bitmap_isfull (hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure
 Test whether bitmap bitmap is completely full.
HWLOC_DECLSPEC int hwloc_bitmap_first (hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure
 Compute the first index (least significant bit) in bitmap bitmap.
HWLOC_DECLSPEC int hwloc_bitmap_next (hwloc_const_bitmap_t bitmap, unsigned prev) __hwloc_attribute_pure
 Compute the next index in bitmap bitmap which is after index prev.
HWLOC_DECLSPEC int hwloc_bitmap_last (hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure
 Compute the last index (most significant bit) in bitmap bitmap.
HWLOC_DECLSPEC int hwloc_bitmap_weight (hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure
 Compute the "weight" of bitmap bitmap (i.e., number of indexes that are in the bitmap).
HWLOC_DECLSPEC void hwloc_bitmap_or (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.
HWLOC_DECLSPEC void hwloc_bitmap_and (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.
HWLOC_DECLSPEC void hwloc_bitmap_andnot (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 And bitmap bitmap1 and the negation of bitmap2 and store the result in bitmap res.
HWLOC_DECLSPEC void hwloc_bitmap_xor (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
 Xor bitmaps bitmap1 and bitmap2 and store the result in bitmap res.
HWLOC_DECLSPEC void hwloc_bitmap_not (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap)
 Negate bitmap bitmap and store the result in bitmap res.
HWLOC_DECLSPEC int hwloc_bitmap_intersects (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) __hwloc_attribute_pure
 Test whether bitmaps bitmap1 and bitmap2 intersects.
HWLOC_DECLSPEC int hwloc_bitmap_isincluded (hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap) __hwloc_attribute_pure
 Test whether bitmap sub_bitmap is part of bitmap super_bitmap.
HWLOC_DECLSPEC int hwloc_bitmap_isequal (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) __hwloc_attribute_pure
 Test whether bitmap bitmap1 is equal to bitmap bitmap2.
HWLOC_DECLSPEC int hwloc_bitmap_compare_first (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) __hwloc_attribute_pure
 Compare bitmaps bitmap1 and bitmap2 using their lowest index.
HWLOC_DECLSPEC int hwloc_bitmap_compare (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) __hwloc_attribute_pure
 Compare bitmaps bitmap1 and bitmap2 using their highest index.
+-

Detailed Description

+-

For use in hwloc itself, a hwloc_bitmap_t usually represents a set of objects, typically logical processors or memory nodes, indexed by OS physical number.

+-

A bitmap may be infinite.

+-

Define Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
#define hwloc_bitmap_foreach_begin( id,
 bitmap 
)
+-
+-
+- +-

Loop macro iterating on bitmap bitmap.

+-

index is the loop variable; it should be an unsigned int. The first iteration will set index to the lowest index in the bitmap. Successive iterations will iterate through, in order, all remaining indexes that in the bitmap. To be specific: each iteration will return a value for index such that hwloc_bitmap_isset(bitmap, index) is true.

+-

The assert prevents the loop from being infinite if the bitmap is infinite.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +-
#define hwloc_bitmap_foreach_end( ) 
+-
+-
+- +-

End of loop. Needs a terminating ';'.

+-
See also:
hwloc_bitmap_foreach_begin
+- +-
+-
+-

Typedef Documentation

+- +-
+-
+- +- +- +- +-
typedef struct hwloc_bitmap_s* hwloc_bitmap_t
+-
+-
+- +-

Set of bits represented as an opaque pointer to an internal bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +-
typedef struct hwloc_bitmap_s* hwloc_const_bitmap_t
+-
+-
+- +-
+-
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_allbut (hwloc_bitmap_t  bitmap,
unsigned  id 
)
+-
+-
+- +-

Fill the bitmap and clear the index id.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC hwloc_bitmap_t hwloc_bitmap_alloc (void  ) 
+-
+-
+- +-

Allocate a new empty bitmap.

+-
Returns:
A valid bitmap or NULL.
+-

The bitmap should be freed by a corresponding call to hwloc_bitmap_free().

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC hwloc_bitmap_t hwloc_bitmap_alloc_full (void  ) 
+-
+-
+- +-

Allocate a new full bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_and (hwloc_bitmap_t  res,
hwloc_const_bitmap_t  bitmap1,
hwloc_const_bitmap_t  bitmap2 
)
+-
+-
+- +-

And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_andnot (hwloc_bitmap_t  res,
hwloc_const_bitmap_t  bitmap1,
hwloc_const_bitmap_t  bitmap2 
)
+-
+-
+- +-

And bitmap bitmap1 and the negation of bitmap2 and store the result in bitmap res.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_asprintf (char **  strp,
hwloc_const_bitmap_t  bitmap 
)
+-
+-
+- +-

Stringify a bitmap into a newly allocated string.

+-
Returns:
the number of character that were actually written (not including the ending \0).
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_clr (hwloc_bitmap_t  bitmap,
unsigned  id 
)
+-
+-
+- +-

Remove index id from bitmap bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_clr_range (hwloc_bitmap_t  bitmap,
unsigned  begin,
unsigned  end 
)
+-
+-
+- +-

Remove index from begin to end in bitmap bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_compare (hwloc_const_bitmap_t  bitmap1,
hwloc_const_bitmap_t  bitmap2 
)
+-
+-
+- +-

Compare bitmaps bitmap1 and bitmap2 using their highest index.

+-

Higher most significant bit is higher. The empty bitmap is considered lower than anything.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_compare_first (hwloc_const_bitmap_t  bitmap1,
hwloc_const_bitmap_t  bitmap2 
)
+-
+-
+- +-

Compare bitmaps bitmap1 and bitmap2 using their lowest index.

+-

Smaller least significant bit is smaller. The empty bitmap is considered higher than anything.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_copy (hwloc_bitmap_t  dst,
hwloc_const_bitmap_t  src 
)
+-
+-
+- +-

Copy the contents of bitmap src into the already allocated bitmap dst.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC hwloc_bitmap_t hwloc_bitmap_dup (hwloc_const_bitmap_t  bitmap ) 
+-
+-
+- +-

Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_fill (hwloc_bitmap_t  bitmap ) 
+-
+-
+- +-

Fill bitmap bitmap with all possible indexes (even if those objects don't exist or are otherwise unavailable).

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_first (hwloc_const_bitmap_t  bitmap ) 
+-
+-
+- +-

Compute the first index (least significant bit) in bitmap bitmap.

+-
Returns:
-1 if no index is set.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_free (hwloc_bitmap_t  bitmap ) 
+-
+-
+- +-

Free bitmap bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_from_ith_ulong (hwloc_bitmap_t  bitmap,
unsigned  i,
unsigned long  mask 
)
+-
+-
+- +-

Setup bitmap bitmap from unsigned long mask used as i -th subset.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_from_ulong (hwloc_bitmap_t  bitmap,
unsigned long  mask 
)
+-
+-
+- +-

Setup bitmap bitmap from unsigned long mask.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_intersects (hwloc_const_bitmap_t  bitmap1,
hwloc_const_bitmap_t  bitmap2 
)
+-
+-
+- +-

Test whether bitmaps bitmap1 and bitmap2 intersects.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_isequal (hwloc_const_bitmap_t  bitmap1,
hwloc_const_bitmap_t  bitmap2 
)
+-
+-
+- +-

Test whether bitmap bitmap1 is equal to bitmap bitmap2.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_isfull (hwloc_const_bitmap_t  bitmap ) 
+-
+-
+- +-

Test whether bitmap bitmap is completely full.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_isincluded (hwloc_const_bitmap_t  sub_bitmap,
hwloc_const_bitmap_t  super_bitmap 
)
+-
+-
+- +-

Test whether bitmap sub_bitmap is part of bitmap super_bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_isset (hwloc_const_bitmap_t  bitmap,
unsigned  id 
)
+-
+-
+- +-

Test whether index id is part of bitmap bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_iszero (hwloc_const_bitmap_t  bitmap ) 
+-
+-
+- +-

Test whether bitmap bitmap is empty.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_last (hwloc_const_bitmap_t  bitmap ) 
+-
+-
+- +-

Compute the last index (most significant bit) in bitmap bitmap.

+-
Returns:
-1 if no index is bitmap, or if the index bitmap is infinite.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_next (hwloc_const_bitmap_t  bitmap,
unsigned  prev 
)
+-
+-
+- +-

Compute the next index in bitmap bitmap which is after index prev.

+-
Returns:
-1 if no index with higher index is bitmap.
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_not (hwloc_bitmap_t  res,
hwloc_const_bitmap_t  bitmap 
)
+-
+-
+- +-

Negate bitmap bitmap and store the result in bitmap res.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_only (hwloc_bitmap_t  bitmap,
unsigned  id 
)
+-
+-
+- +-

Empty the bitmap bitmap and add bit id.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_or (hwloc_bitmap_t  res,
hwloc_const_bitmap_t  bitmap1,
hwloc_const_bitmap_t  bitmap2 
)
+-
+-
+- +-

Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_set (hwloc_bitmap_t  bitmap,
unsigned  id 
)
+-
+-
+- +-

Add index id in bitmap bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_set_ith_ulong (hwloc_bitmap_t  bitmap,
unsigned  i,
unsigned long  mask 
)
+-
+-
+- +-

Replace i -th subset of bitmap bitmap with unsigned long mask.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_set_range (hwloc_bitmap_t  bitmap,
unsigned  begin,
unsigned  end 
)
+-
+-
+- +-

Add indexess from begin to end in bitmap bitmap.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC void hwloc_bitmap_singlify (hwloc_bitmap_t  bitmap ) 
+-
+-
+- +-

Keep a single index among those set in bitmap bitmap.

+-

May be useful before binding so that the process does not have a chance of migrating between multiple logical CPUs in the original mask.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_snprintf (char *__hwloc_restrict  buf,
size_t  buflen,
hwloc_const_bitmap_t  bitmap 
)
+-
+-
+- +-

Stringify a bitmap.

+-

Up to buflen characters may be written in buffer buf.

+-
Returns:
the number of character that were actually written if not truncating, or that would have been written (not including the ending \0).
+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_sscanf (hwloc_bitmap_t  bitmap,
const char *__hwloc_restrict  string 
)
+-
+-
+- +-

Parse a bitmap string and stores it in bitmap bitmap.

+-

Must start and end with a digit.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_taskset_asprintf (char **  strp,
hwloc_const_bitmap_t  bitmap 
)
+-
+-
+- +-

Stringify a bitmap into a newly allocated taskset-specific string.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_taskset_snprintf (char *__hwloc_restrict  buf,
size_t  buflen,
hwloc_const_bitmap_t  bitmap 
)
+-
+-
+- +-

Stringify a bitmap in the taskset-specific format.

+-

The taskset command manipulates bitmap strings that contain a single (possible very long) hexadecimal number starting with 0x.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_bitmap_taskset_sscanf (hwloc_bitmap_t  bitmap,
const char *__hwloc_restrict  string 
)
+-
+-
+- +-

Parse a taskset-specific bitmap string and stores it in bitmap bitmap.

++ ++ ++Hardware Locality (hwloc): Nodeset Helpers ++ ++ ++ ++ ++

Nodeset Helpers

++ ++ ++ + +- +- +- +-
+-
+-

Functions

inline hwloc_const_nodeset_t
++ 
hwloc_topology_get_complete_nodeset (hwloc_topology_t topology)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC unsigned long hwloc_bitmap_to_ith_ulong (hwloc_const_bitmap_t  bitmap,
unsigned  i 
)
+-
+-
+- +-

Convert the i -th subset of bitmap bitmap into unsigned long mask.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC unsigned long hwloc_bitmap_to_ulong (hwloc_const_bitmap_t  bitmap ) 
+-
+-
++
inline hwloc_const_nodeset_t
++ 
hwloc_topology_get_topology_nodeset (hwloc_topology_t topology)
inline hwloc_const_nodeset_t
++ 
hwloc_topology_get_allowed_nodeset (hwloc_topology_t topology)
+- +- +- +- +- +- +- ++ ++
HWLOC_DECLSPEC int hwloc_bitmap_weight (hwloc_const_bitmap_t  bitmap ) 
 Get allowed node set.
++


Function Documentation

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_const_nodeset_t hwloc_topology_get_allowed_nodeset hwloc_topology_t  topology  )  [static]
+- +-
+- +-

Compute the "weight" of bitmap bitmap (i.e., number of indexes that are in the bitmap).

+-
Returns:
the number of indexes that are in the bitmap.
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC void hwloc_bitmap_xor (hwloc_bitmap_t  res,
hwloc_const_bitmap_t  bitmap1,
hwloc_const_bitmap_t  bitmap2 
)
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get allowed node set. ++

++

Returns:
the node set of allowed memory of the system. If the topology is the result of a combination of several systems, NULL is returned.
++
Note:
The returned nodeset is not newly allocated and should thus not be changed or freed, hwloc_nodeset_dup must be used to obtain a local copy.
++
++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_const_nodeset_t hwloc_topology_get_complete_nodeset hwloc_topology_t  topology  )  [static]
+- +-
+- +-

Xor bitmaps bitmap1 and bitmap2 and store the result in bitmap res.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- ++ ++ ++
HWLOC_DECLSPEC void hwloc_bitmap_zero (hwloc_bitmap_t  bitmap ) 
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ + +
inline hwloc_const_nodeset_t hwloc_topology_get_topology_nodeset hwloc_topology_t  topology  )  [static]
+- +-
+- +-

Empty the bitmap bitmap.

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00057.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00057.html +--- hwloc-1.1/doc/doxygen-doc/html/a00057.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00057.html 2010-12-31 23:48:22.459896795 +0100 +@@ -1,129 +1,213 @@ +- +- +- +- +-Hardware Locality (hwloc): Helpers for manipulating glibc sched affinity +- +- +- +- +- +- +-
+- +-
+-

Helpers for manipulating glibc sched affinity

+-
+-
+- +- +- +- +- +- +-

+-Functions

static __hwloc_inline int hwloc_cpuset_to_glibc_sched_affinity (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize)
 Convert hwloc CPU set toposet into glibc sched affinity CPU set schedset.
static __hwloc_inline int hwloc_cpuset_from_glibc_sched_affinity (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize)
 Convert glibc sched affinity CPU set schedset into hwloc CPU set.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++Hardware Locality (hwloc): Conversion between cpuset and nodeset ++ ++ ++ ++ ++

Conversion between cpuset and nodeset

static __hwloc_inline int hwloc_cpuset_from_glibc_sched_affinity (hwloc_topology_t topology  __hwloc_attribute_unused,
hwloc_cpuset_t  hwlocset,
const cpu_set_t *  schedset,
size_t  schedsetsize 
) [static]
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

inline void hwloc_cpuset_to_nodeset (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_nodeset_t nodeset)
 Convert a CPU set into a NUMA node set and handle non-NUMA cases.
inline void hwloc_cpuset_to_nodeset_strict (struct hwloc_topology *topology, hwloc_const_cpuset_t cpuset, hwloc_nodeset_t nodeset)
 Convert a CPU set into a NUMA node set without handling non-NUMA cases.
inline void hwloc_cpuset_from_nodeset (hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_const_nodeset_t nodeset)
 Convert a NUMA node set into a CPU set and handle non-NUMA cases.
inline void hwloc_cpuset_from_nodeset_strict (struct hwloc_topology *topology, hwloc_cpuset_t cpuset, hwloc_const_nodeset_t nodeset)
 Convert a NUMA node set into a CPU set without handling non-NUMA cases.
++

Detailed Description

++There are two semantics for converting cpusets to nodesets depending on how non-NUMA machines are handled.

++When manipulating nodesets for memory binding, non-NUMA machines should be considered as having a single NUMA node. The standard conversion routines below should be used so that marking the first bit of the nodeset means that memory should be bound to a non-NUMA whole machine.

++When manipulating nodesets as an actual list of NUMA nodes without any need to handle memory binding on non-NUMA machines, the strict conversion routines may be used instead.


Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline void hwloc_cpuset_from_nodeset hwloc_topology_t  topology,
hwloc_cpuset_t  cpuset,
hwloc_const_nodeset_t  nodeset
[static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Convert glibc sched affinity CPU set schedset into hwloc CPU set.

+-

This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.

+-

schedsetsize should be sizeof(cpu_set_t) unless schedset was dynamically allocated with CPU_ALLOC

++

++Convert a NUMA node set into a CPU set and handle non-NUMA cases. ++

++If the topology contains no NUMA nodes, the machine is considered as a single memory node, and the following behavior is used: If nodeset is empty, cpuset will be emptied as well. Otherwise cpuset will be entirely filled. This is useful for manipulating memory binding sets.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline void hwloc_cpuset_from_nodeset_strict struct hwloc_topology *  topology,
hwloc_cpuset_t  cpuset,
hwloc_const_nodeset_t  nodeset
[static]
++
++ ++ ++ ++
++   ++ + +- +- +- +-
+-
+- ++

++Convert a NUMA node set into a CPU set without handling non-NUMA cases. ++

++This is the strict variant of hwloc_cpuset_from_nodeset. It does not fix non-NUMA cases. If the topology contains some NUMA nodes, behave exactly the same. However, if the topology contains no NUMA nodes, return an empty cpuset. ++ ++

++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ + ++
static __hwloc_inline int hwloc_cpuset_to_glibc_sched_affinity (hwloc_topology_t topology  __hwloc_attribute_unused, inline void hwloc_cpuset_to_nodeset hwloc_topology_t  topology,
hwloc_const_cpuset_t  hwlocset, hwloc_const_cpuset_t  cpuset,
cpu_set_t *  schedset, hwloc_nodeset_t  nodeset
size_t  schedsetsize  [static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert a CPU set into a NUMA node set and handle non-NUMA cases. ++

++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.

++If the topology contains no NUMA nodes, the machine is considered as a single memory node, and the following behavior is used: If cpuset is empty, nodeset will be emptied as well. Otherwise nodeset will be entirely filled.

++

++ ++ ++ ++ ++
++ + +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
) [static]inline void hwloc_cpuset_to_nodeset_strict struct hwloc_topology *  topology,
hwloc_const_cpuset_t  cpuset,
hwloc_nodeset_t  nodeset
[static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Convert hwloc CPU set toposet into glibc sched affinity CPU set schedset.

+-

This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.

+-

schedsetsize should be sizeof(cpu_set_t) unless schedset was dynamically allocated with CPU_ALLOC

+- +- +- +- +-
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00058.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00058.html +--- hwloc-1.1/doc/doxygen-doc/html/a00058.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00058.html 2010-12-31 23:48:22.552908175 +0100 +@@ -1,149 +1,1862 @@ +- +- +- +- +-Hardware Locality (hwloc): Linux-only helpers +- +- +- +- +- +- +-
+- +-
+-

Linux-only helpers

+-
+-
+- +- +- +- +- +- +- +- +-

+-Functions

HWLOC_DECLSPEC int hwloc_linux_parse_cpumap_file (FILE *file, hwloc_cpuset_t set)
 Convert a linux kernel cpumap file file into hwloc CPU set.
HWLOC_DECLSPEC int hwloc_linux_set_tid_cpubind (hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set)
 Bind a thread tid on cpus given in cpuset set.
HWLOC_DECLSPEC int hwloc_linux_get_tid_cpubind (hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set)
 Get the current binding of thread tid.
+-

Detailed Description

+-

This includes helpers for manipulating linux kernel cpumap files, and hwloc equivalents of the Linux sched_setaffinity and sched_getaffinity system calls.

+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_linux_get_tid_cpubind (hwloc_topology_t  topology,
pid_t  tid,
hwloc_cpuset_t  set 
)
+-
+-
+- +-

Get the current binding of thread tid.

+-

The behavior is exactly the same as the Linux sched_setaffinity system call, but uses a hwloc cpuset.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_linux_parse_cpumap_file (FILE *  file,
hwloc_cpuset_t  set 
)
+-
+-
+- +-

Convert a linux kernel cpumap file file into hwloc CPU set.

+-

Might be used when reading CPU set from sysfs attributes such as topology and caches for processors, or local_cpus for devices.

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
HWLOC_DECLSPEC int hwloc_linux_set_tid_cpubind (hwloc_topology_t  topology,
pid_t  tid,
hwloc_const_cpuset_t  set 
)
+-
+-
+- +-

Bind a thread tid on cpus given in cpuset set.

+-

The behavior is exactly the same as the Linux sched_setaffinity system call, but uses a hwloc cpuset.

+- +-
+-
+-
+- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00059.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00059.html +--- hwloc-1.1/doc/doxygen-doc/html/a00059.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00059.html 2010-12-31 23:48:22.414891288 +0100 +@@ -1,219 +1,127 @@ +- +- +- +- +-Hardware Locality (hwloc): Helpers for manipulating Linux libnuma unsigned long masks +- +- +- +- +- +- +-
+- +-
+-

Helpers for manipulating Linux libnuma unsigned long masks

+-
+-
+- +- +- +- +- +- +- +- +- +- +-

+-Functions

static __hwloc_inline int hwloc_cpuset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode)
 Convert hwloc CPU set cpuset into the array of unsigned long mask.
static __hwloc_inline int hwloc_nodeset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode)
 Convert hwloc NUMA node set nodeset into the array of unsigned long mask.
static __hwloc_inline int hwloc_cpuset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode)
 Convert the array of unsigned long mask into hwloc CPU set.
static __hwloc_inline int hwloc_nodeset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode)
 Convert the array of unsigned long mask into hwloc NUMA node set.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline int hwloc_cpuset_from_linux_libnuma_ulongs (hwloc_topology_t  topology,
hwloc_cpuset_t  cpuset,
const unsigned long *  mask,
unsigned long  maxnode 
) [static]
+-
+-
+- +-

Convert the array of unsigned long mask into hwloc CPU set.

+-

mask is a array of unsigned long that will be read. maxnode contains the maximal node number that may be read in mask.

+-

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).

+- +-
+-
+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline int hwloc_cpuset_to_linux_libnuma_ulongs (hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset,
unsigned long *  mask,
unsigned long *  maxnode 
) [static]
+-
+-
++ ++ ++Hardware Locality (hwloc): Helpers for manipulating glibc sched affinity ++ ++ ++ ++ ++

Helpers for manipulating glibc sched affinity

++ ++ ++ + +-

Convert hwloc CPU set cpuset into the array of unsigned long mask.

+-

mask is the array of unsigned long that will be filled. maxnode contains the maximal node number that may be stored in mask. maxnode will be set to the maximal node number that was found, plus one.

+-

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.

++ ++ + +- +- +- +-
+-
+-

Functions

inline int hwloc_cpuset_to_glibc_sched_affinity (hwloc_topology_t topology , hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize)
 Convert hwloc CPU set toposet into glibc sched affinity CPU set schedset.
inline int hwloc_cpuset_from_glibc_sched_affinity (hwloc_topology_t topology , hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize)
++ ++
 Convert glibc sched affinity CPU set schedset into hwloc CPU set.
++

Function Documentation

++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
static __hwloc_inline int hwloc_nodeset_from_linux_libnuma_ulongs (hwloc_topology_t  topology, inline int hwloc_cpuset_from_glibc_sched_affinity hwloc_topology_t topology  ,
hwloc_nodeset_t  nodeset, hwloc_cpuset_t  hwlocset,
const unsigned long *  mask, const cpu_set_t *  schedset,
unsigned long  maxnode size_t  schedsetsize
) [static] [static]
+- +-
+- +-

Convert the array of unsigned long mask into hwloc NUMA node set.

+-

mask is a array of unsigned long that will be read. maxnode contains the maximal node number that may be read in mask.

+-

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).

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert glibc sched affinity CPU set schedset into hwloc CPU set. ++

++This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.

++schedsetsize should be sizeof(cpu_set_t) unless schedset was dynamically allocated with CPU_ALLOC

++

++ ++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
static __hwloc_inline int hwloc_nodeset_to_linux_libnuma_ulongs (hwloc_topology_t  topology, inline int hwloc_cpuset_to_glibc_sched_affinity hwloc_topology_t topology  ,
hwloc_const_nodeset_t  nodeset, hwloc_const_cpuset_t  hwlocset,
unsigned long *  mask, cpu_set_t *  schedset,
unsigned long *  maxnode size_t  schedsetsize
) [static] [static]
+- +-
+- +-

Convert hwloc NUMA node set nodeset into the array of unsigned long mask.

+-

mask is the array of unsigned long that will be filled. maxnode contains the maximal node number that may be stored in mask. maxnode will be set to the maximal node number that was found, plus one.

+-

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.

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert hwloc CPU set toposet into glibc sched affinity CPU set schedset. ++

++This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.

++schedsetsize should be sizeof(cpu_set_t) unless schedset was dynamically allocated with CPU_ALLOC

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00060.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00060.html +--- hwloc-1.1/doc/doxygen-doc/html/a00060.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00060.html 2010-12-31 23:48:22.555908543 +0100 +@@ -1,187 +1,156 @@ +- +- +- +- +-Hardware Locality (hwloc): Helpers for manipulating Linux libnuma bitmask +- +- +- +- +- +- +-
+- +-
+-

Helpers for manipulating Linux libnuma bitmask

+-
+-
+- +- +- +- +- +- +- +- +- +- +-

+-Functions

static __hwloc_inline struct
+-bitmask
+-*__hwloc_attribute_malloc 
hwloc_cpuset_to_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)
 Convert hwloc CPU set cpuset into the returned libnuma bitmask.
static __hwloc_inline struct
+-bitmask
+-*__hwloc_attribute_malloc 
hwloc_nodeset_to_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)
 Convert hwloc NUMA node set nodeset into the returned libnuma bitmask.
static __hwloc_inline int hwloc_cpuset_from_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const struct bitmask *bitmask)
 Convert libnuma bitmask bitmask into hwloc CPU set cpuset.
static __hwloc_inline int hwloc_nodeset_from_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const struct bitmask *bitmask)
 Convert libnuma bitmask bitmask into hwloc NUMA node set nodeset.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline int hwloc_cpuset_from_linux_libnuma_bitmask (hwloc_topology_t  topology,
hwloc_cpuset_t  cpuset,
const struct bitmask *  bitmask 
) [static]
+-
+-
++ ++ ++Hardware Locality (hwloc): Linux-only helpers ++ ++ ++ ++ ++

Linux-only helpers

++ ++ ++ ++ ++ ++ + +-

Convert libnuma bitmask bitmask into hwloc CPU set cpuset.

+-

This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter.

++ ++ + +- +- +- +-
+-
+-

Functions

int hwloc_linux_parse_cpumap_file (FILE *file, hwloc_cpuset_t set)
 Convert a linux kernel cpumap file file into hwloc CPU set.
int hwloc_linux_set_tid_cpubind (hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set)
 Bind a thread tid on cpus given in cpuset set.
int hwloc_linux_get_tid_cpubind (hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++
static __hwloc_inline struct bitmask* __hwloc_attribute_malloc hwloc_cpuset_to_linux_libnuma_bitmask (hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset 
) [static, read]
 Get the current binding of thread tid.
++

Detailed Description

++This includes helpers for manipulating linux kernel cpumap files, and hwloc equivalents of the Linux sched_setaffinity and sched_getaffinity system calls.

Function Documentation

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_linux_get_tid_cpubind hwloc_topology_t  topology,
pid_t  tid,
hwloc_cpuset_t  set
+- +-
+- +-

Convert hwloc CPU set cpuset into the returned libnuma bitmask.

+-

The returned bitmask should later be freed with numa_bitmask_free.

+-

This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.

+-
Returns:
newly allocated struct bitmask.
+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline int hwloc_nodeset_from_linux_libnuma_bitmask (hwloc_topology_t  topology,
hwloc_nodeset_t  nodeset,
const struct bitmask *  bitmask 
) [static]
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get the current binding of thread tid. ++

++The behavior is exactly the same as the Linux sched_setaffinity system call, but uses a hwloc cpuset.

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_linux_parse_cpumap_file FILE *  file,
hwloc_cpuset_t  set
+- +-
+- +-

Convert libnuma bitmask bitmask into hwloc NUMA node set nodeset.

+-

This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter.

+- +-
+- +- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++
static __hwloc_inline struct bitmask* __hwloc_attribute_malloc hwloc_nodeset_to_linux_libnuma_bitmask (hwloc_topology_t  topology,
hwloc_const_nodeset_t  nodeset 
) [static, read]
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert a linux kernel cpumap file file into hwloc CPU set. ++

++Might be used when reading CPU set from sysfs attributes such as topology and caches for processors, or local_cpus for devices.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
int hwloc_linux_set_tid_cpubind hwloc_topology_t  topology,
pid_t  tid,
hwloc_const_cpuset_t  set
+- +-
+- +-

Convert hwloc NUMA node set nodeset into the returned libnuma bitmask.

+-

The returned bitmask should later be freed with numa_bitmask_free.

+-

This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.

+-
Returns:
newly allocated struct bitmask.
+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Bind a thread tid on cpus given in cpuset set. ++

++The behavior is exactly the same as the Linux sched_setaffinity system call, but uses a hwloc cpuset.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00061.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00061.html +--- hwloc-1.1/doc/doxygen-doc/html/a00061.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00061.html 2010-12-31 23:48:22.512903281 +0100 +@@ -1,191 +1,237 @@ +- +- +- +- +-Hardware Locality (hwloc): Helpers for manipulating Linux libnuma nodemask_t +- +- +- +- +- +- +-
+- +-
+-

Helpers for manipulating Linux libnuma nodemask_t

+-
+-
+- +- +- +- +- +- +- +- +- +- +-

+-Functions

static __hwloc_inline int hwloc_cpuset_to_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, nodemask_t *nodemask)
 Convert hwloc CPU set cpuset into libnuma nodemask nodemask.
static __hwloc_inline int hwloc_nodeset_to_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, nodemask_t *nodemask)
 Convert hwloc NUMA node set nodeset into libnuma nodemask nodemask.
static __hwloc_inline int hwloc_cpuset_from_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const nodemask_t *nodemask)
 Convert libnuma nodemask nodemask into hwloc CPU set cpuset.
static __hwloc_inline int hwloc_nodeset_from_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const nodemask_t *nodemask)
 Convert libnuma nodemask nodemask into hwloc NUMA node set nodeset.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline int hwloc_cpuset_from_linux_libnuma_nodemask (hwloc_topology_t  topology,
hwloc_cpuset_t  cpuset,
const nodemask_t *  nodemask 
) [static]
+-
+-
++ ++ ++Hardware Locality (hwloc): Helpers for manipulating Linux libnuma unsigned long masks ++ ++ ++ ++ ++

Helpers for manipulating Linux libnuma unsigned long masks

++ ++ ++ ++ ++ ++ ++ ++ ++ + +-

Convert libnuma nodemask nodemask into hwloc CPU set cpuset.

+-

This function may be used before calling some old libnuma functions that use a nodemask_t as an output parameter.

++ ++ + +- +- +- +-
+-
+-

Functions

inline int hwloc_cpuset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode)
 Convert hwloc CPU set cpuset into the array of unsigned long mask.
inline int hwloc_nodeset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode)
 Convert hwloc NUMA node set nodeset into the array of unsigned long mask.
inline int hwloc_cpuset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode)
 Convert the array of unsigned long mask into hwloc CPU set.
inline int hwloc_nodeset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode)
++ ++
 Convert the array of unsigned long mask into hwloc NUMA node set.
++

Function Documentation

++

++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
static __hwloc_inline int hwloc_cpuset_to_linux_libnuma_nodemask (hwloc_topology_t  topology, inline int hwloc_cpuset_from_linux_libnuma_ulongs hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset, hwloc_cpuset_t  cpuset,
nodemask_t *  nodemask const unsigned long *  mask,
) [static]unsigned long  maxnode
[static]
+- +-
+- +-

Convert hwloc CPU set cpuset into libnuma nodemask nodemask.

+-

This function may be used before calling some old libnuma functions that use a nodemask_t as an input parameter.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert the array of unsigned long mask into hwloc CPU set. ++

++mask is a array of unsigned long that will be read. maxnode contains the maximal node number that may be read in mask.

++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).

++

++ ++ ++
++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
inline int hwloc_cpuset_to_linux_libnuma_ulongs hwloc_topology_t  topology,
static __hwloc_inline int hwloc_nodeset_from_linux_libnuma_nodemask (hwloc_topology_t  topology, hwloc_const_cpuset_t  cpuset,
hwloc_nodeset_t  nodeset, unsigned long *  mask,
const nodemask_t *  nodemask unsigned long *  maxnode
) [static] [static]
+- +-
+- +-

Convert libnuma nodemask nodemask into hwloc NUMA node set nodeset.

+-

This function may be used before calling some old libnuma functions that use a nodemask_t as an output parameter.

+- +-
+- +- +-
+-
+- ++ ++ ++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert hwloc CPU set cpuset into the array of unsigned long mask. ++

++mask is the array of unsigned long that will be filled. maxnode contains the maximal node number that may be stored in mask. maxnode will be set to the maximal node number that was found, plus one.

++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.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
inline int hwloc_nodeset_from_linux_libnuma_ulongs hwloc_topology_t  topology,
static __hwloc_inline int hwloc_nodeset_to_linux_libnuma_nodemask (hwloc_topology_t  topology, hwloc_nodeset_t  nodeset,
hwloc_const_nodeset_t  nodeset, const unsigned long *  mask,
nodemask_t *  nodemask unsigned long  maxnode
) [static] [static]
+- +-
+- +-

Convert hwloc NUMA node set nodeset into libnuma nodemask nodemask.

+-

This function may be used before calling some old libnuma functions that use a nodemask_t as an input parameter.

+- +-
+- +- +-
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert the array of unsigned long mask into hwloc NUMA node set. ++

++mask is a array of unsigned long that will be read. maxnode contains the maximal node number that may be read in mask.

++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).

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline int hwloc_nodeset_to_linux_libnuma_ulongs hwloc_topology_t  topology,
hwloc_const_nodeset_t  nodeset,
unsigned long *  mask,
unsigned long *  maxnode
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert hwloc NUMA node set nodeset into the array of unsigned long mask. ++

++mask is the array of unsigned long that will be filled. maxnode contains the maximal node number that may be stored in mask. maxnode will be set to the maximal node number that was found, plus one.

++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.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00062.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00062.html +--- hwloc-1.1/doc/doxygen-doc/html/a00062.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00062.html 2010-12-31 23:48:22.553908297 +0100 +@@ -1,77 +1,205 @@ +- +- +- +- +-Hardware Locality (hwloc): CUDA Driver API Specific Functions +- +- +- +- +- +- +-
+- +-
+-

CUDA Driver API Specific Functions

+-
+-
+- +- +- +- +-

+-Functions

static __hwloc_inline int hwloc_cuda_get_device_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, CUdevice cudevice, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to device cudevice.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++Hardware Locality (hwloc): Helpers for manipulating Linux libnuma bitmask ++ ++ ++ ++ ++

Helpers for manipulating Linux libnuma bitmask

static __hwloc_inline int hwloc_cuda_get_device_cpuset (hwloc_topology_t topology  __hwloc_attribute_unused,
CUdevice  cudevice,
hwloc_cpuset_t  set 
) [static]
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

inline struct bitmask
++* 
hwloc_cpuset_to_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)
 Convert hwloc CPU set cpuset into the returned libnuma bitmask.
inline struct bitmask
++* 
hwloc_nodeset_to_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)
 Convert hwloc NUMA node set nodeset into the returned libnuma bitmask.
inline int hwloc_cpuset_from_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const struct bitmask *bitmask)
 Convert libnuma bitmask bitmask into hwloc CPU set cpuset.
inline int hwloc_nodeset_from_linux_libnuma_bitmask (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const struct bitmask *bitmask)
 Convert libnuma bitmask bitmask into hwloc NUMA node set nodeset.
++

Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline int hwloc_cpuset_from_linux_libnuma_bitmask hwloc_topology_t  topology,
hwloc_cpuset_t  cpuset,
const struct bitmask *  bitmask
[static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Get the CPU set of logical processors that are physically close to device cudevice.

+-

For the given CUDA Driver API device cudevice, read the corresponding kernel-provided cpumap file and return the corresponding CPU set. This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.

++

++Convert libnuma bitmask bitmask into hwloc CPU set cpuset. ++

++This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline struct bitmask* hwloc_cpuset_to_linux_libnuma_bitmask hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset
[static]
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline int hwloc_nodeset_from_linux_libnuma_bitmask hwloc_topology_t  topology,
hwloc_nodeset_t  nodeset,
const struct bitmask *  bitmask
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert libnuma bitmask bitmask into hwloc NUMA node set nodeset. ++

++This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline struct bitmask* hwloc_nodeset_to_linux_libnuma_bitmask hwloc_topology_t  topology,
hwloc_const_nodeset_t  nodeset
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert hwloc NUMA node set nodeset into the returned libnuma bitmask. ++

++The returned bitmask should later be freed with numa_bitmask_free.

++This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.

++

Returns:
newly allocated struct bitmask.
++
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00063.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00063.html +--- hwloc-1.1/doc/doxygen-doc/html/a00063.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00063.html 2010-12-31 23:48:22.510903035 +0100 +@@ -1,77 +1,209 @@ +- +- +- +- +-Hardware Locality (hwloc): CUDA Runtime API Specific Functions +- +- +- +- +- +- +-
+- +-
+-

CUDA Runtime API Specific Functions

+-
+-
+- +- +- +- +-

+-Functions

static __hwloc_inline int hwloc_cudart_get_device_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, int device, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to device cudevice.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++Hardware Locality (hwloc): Helpers for manipulating Linux libnuma nodemask_t ++ ++ ++ ++ ++

Helpers for manipulating Linux libnuma nodemask_t

static __hwloc_inline int hwloc_cudart_get_device_cpuset (hwloc_topology_t topology  __hwloc_attribute_unused,
int  device,
hwloc_cpuset_t  set 
) [static]
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

inline int hwloc_cpuset_to_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, nodemask_t *nodemask)
 Convert hwloc CPU set cpuset into libnuma nodemask nodemask.
inline int hwloc_nodeset_to_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, nodemask_t *nodemask)
 Convert hwloc NUMA node set nodeset into libnuma nodemask nodemask.
inline int hwloc_cpuset_from_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const nodemask_t *nodemask)
 Convert libnuma nodemask nodemask into hwloc CPU set cpuset.
inline int hwloc_nodeset_from_linux_libnuma_nodemask (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const nodemask_t *nodemask)
 Convert libnuma nodemask nodemask into hwloc NUMA node set nodeset.
++

Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline int hwloc_cpuset_from_linux_libnuma_nodemask hwloc_topology_t  topology,
hwloc_cpuset_t  cpuset,
const nodemask_t *  nodemask
[static]
+- +-
++
++ ++ ++ ++ ++ ++
++   ++ + +-

Get the CPU set of logical processors that are physically close to device cudevice.

+-

For the given CUDA Runtime API device cudevice, read the corresponding kernel-provided cpumap file and return the corresponding CPU set. This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.

++

++Convert libnuma nodemask nodemask into hwloc CPU set cpuset. ++

++This function may be used before calling some old libnuma functions that use a nodemask_t as an output parameter.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline int hwloc_cpuset_to_linux_libnuma_nodemask hwloc_topology_t  topology,
hwloc_const_cpuset_t  cpuset,
nodemask_t *  nodemask
[static]
++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline int hwloc_nodeset_from_linux_libnuma_nodemask hwloc_topology_t  topology,
hwloc_nodeset_t  nodeset,
const nodemask_t *  nodemask
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert libnuma nodemask nodemask into hwloc NUMA node set nodeset. ++

++This function may be used before calling some old libnuma functions that use a nodemask_t as an output parameter.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline int hwloc_nodeset_to_linux_libnuma_nodemask hwloc_topology_t  topology,
hwloc_const_nodeset_t  nodeset,
nodemask_t *  nodemask
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Convert hwloc NUMA node set nodeset into libnuma nodemask nodemask. ++

++This function may be used before calling some old libnuma functions that use a nodemask_t as an input parameter.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00064.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00064.html +--- hwloc-1.1/doc/doxygen-doc/html/a00064.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00064.html 2010-12-31 23:48:22.489900465 +0100 +@@ -1,77 +1,65 @@ +- +- +- +- +-Hardware Locality (hwloc): OpenFabrics-Specific Functions +- +- +- +- +- +- +-
+- +-
+-

OpenFabrics-Specific Functions

+-
+-
+- +- +- +- ++ ++ ++Hardware Locality (hwloc): CUDA Driver API Specific Functions ++ ++ ++ ++ ++

CUDA Driver API Specific Functions

+-Functions

static __hwloc_inline int hwloc_ibv_get_device_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, struct ibv_device *ibdev, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to device ibdev.
++ ++ ++ ++ ++ +

Functions

inline int hwloc_cuda_get_device_cpuset (hwloc_topology_t topology , CUdevice cudevice, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to device cudevice.
+-

Function Documentation

+- +-
+-
+- ++

Function Documentation

++

++

++ ++ ++ ++
++ + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ ++ ++ + + +- +- +- ++ ++ ++ + +
static __hwloc_inline int hwloc_ibv_get_device_cpuset (hwloc_topology_t topology  __hwloc_attribute_unused, inline int hwloc_cuda_get_device_cpuset hwloc_topology_t topology  ,
struct ibv_device *  ibdev, CUdevice  cudevice,
hwloc_cpuset_t  set hwloc_cpuset_t  set
) [static] [static]
+- +-
+- +-

Get the CPU set of logical processors that are physically close to device ibdev.

+-

For the given OpenFabrics device ibdev, read the corresponding kernel-provided cpumap file and return the corresponding CPU set. This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.

++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00065.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00065.html +--- hwloc-1.1/doc/doxygen-doc/html/a00065.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00065.html 2010-12-31 23:48:22.556908665 +0100 +@@ -1,115 +1,65 @@ +- +- +- +- +-Hardware Locality (hwloc): Myrinet Express-Specific Functions +- +- +- +- +- +- +-
+- +-
+-

Myrinet Express-Specific Functions

+-
+-
+- +- +- +- +- +- +-

+-Functions

static __hwloc_inline int hwloc_mx_board_get_device_cpuset (hwloc_topology_t topology, unsigned id, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close the MX board id.
static __hwloc_inline int hwloc_mx_endpoint_get_device_cpuset (hwloc_topology_t topology, mx_endpoint_t endpoint, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to endpoint endpoint.
+-

Function Documentation

+- +-
+-
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
static __hwloc_inline int hwloc_mx_board_get_device_cpuset (hwloc_topology_t  topology,
unsigned  id,
hwloc_cpuset_t  set 
) [static]
+-
+-
+- +-

Get the CPU set of logical processors that are physically close the MX board id.

+-

For the given Myrinet Express board index id, read the OS-provided NUMA node and return the corresponding CPU set.

++ ++ ++Hardware Locality (hwloc): CUDA Runtime API Specific Functions ++ ++ ++ ++ ++

CUDA Runtime API Specific Functions

++ ++ ++ + +- +- +- +-
+-
+-

Functions

inline int hwloc_cudart_get_device_cpuset (hwloc_topology_t topology , int device, hwloc_cpuset_t set)
+- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++
static __hwloc_inline int hwloc_mx_endpoint_get_device_cpuset (hwloc_topology_t  topology,
mx_endpoint_t  endpoint,
hwloc_cpuset_t  set 
) [static]
 Get the CPU set of logical processors that are physically close to device cudevice.
++

Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + +
inline int hwloc_cudart_get_device_cpuset hwloc_topology_t topology  ,
int  device,
hwloc_cpuset_t  set
[static]
+- +-
+- +-

Get the CPU set of logical processors that are physically close to endpoint endpoint.

+-

For the given Myrinet Express endpoint endpoint, read the OS-provided NUMA node and return the corresponding CPU set.

++
++ ++ ++ ++ ++ ++
++   ++ + +- +- +- +-
++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  + +-doxygen 1.7.1
++doxygen 1.3.9.1 + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00066.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00066.html +--- hwloc-1.1/doc/doxygen-doc/html/a00066.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00066.html 2010-12-31 23:48:22.563909522 +0100 +@@ -0,0 +1,65 @@ ++ ++ ++Hardware Locality (hwloc): OpenFabrics-Specific Functions ++ ++ ++ ++ ++

OpenFabrics-Specific Functions

++ ++ ++ ++ ++ ++

Functions

inline int hwloc_ibv_get_device_cpuset (hwloc_topology_t topology , struct ibv_device *ibdev, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to device ibdev.
++

Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline int hwloc_ibv_get_device_cpuset hwloc_topology_t topology  ,
struct ibv_device *  ibdev,
hwloc_cpuset_t  set
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get the CPU set of logical processors that are physically close to device ibdev. ++

++For the given OpenFabrics device ibdev, read the corresponding kernel-provided cpumap file and return the corresponding CPU set. This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00067.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00067.html +--- hwloc-1.1/doc/doxygen-doc/html/a00067.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00067.html 2010-12-31 23:48:22.496901322 +0100 +@@ -0,0 +1,113 @@ ++ ++ ++Hardware Locality (hwloc): Myrinet Express-Specific Functions ++ ++ ++ ++ ++

Myrinet Express-Specific Functions

++ ++ ++ ++ ++ ++ ++ ++ ++

Functions

inline int hwloc_mx_board_get_device_cpuset (hwloc_topology_t topology, unsigned id, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close the MX board id.
inline int hwloc_mx_endpoint_get_device_cpuset (hwloc_topology_t topology, mx_endpoint_t endpoint, hwloc_cpuset_t set)
 Get the CPU set of logical processors that are physically close to endpoint endpoint.
++

Function Documentation

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline int hwloc_mx_board_get_device_cpuset hwloc_topology_t  topology,
unsigned  id,
hwloc_cpuset_t  set
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get the CPU set of logical processors that are physically close the MX board id. ++

++For the given Myrinet Express board index id, read the OS-provided NUMA node and return the corresponding CPU set.

++

++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
inline int hwloc_mx_endpoint_get_device_cpuset hwloc_topology_t  topology,
mx_endpoint_t  endpoint,
hwloc_cpuset_t  set
[static]
++
++ ++ ++ ++ ++ ++
++   ++ ++ ++

++Get the CPU set of logical processors that are physically close to endpoint endpoint. ++

++For the given Myrinet Express endpoint endpoint, read the OS-provided NUMA node and return the corresponding CPU set.

++


Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00068.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00068.html +--- hwloc-1.1/doc/doxygen-doc/html/a00068.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00068.html 2010-12-31 23:48:22.445895081 +0100 +@@ -0,0 +1,170 @@ ++ ++ ++Hardware Locality (hwloc): bitmap.h Source File ++ ++ ++ ++ ++

bitmap.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2009 CNRS
++00003  * Copyright © 2009-2010 INRIA
++00004  * Copyright © 2009-2010 Université Bordeaux 1
++00005  * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
++00006  * See COPYING in top-level directory.
++00007  */
++00008 
++00013 #ifndef HWLOC_BITMAP_H
++00014 #define HWLOC_BITMAP_H
++00015 
++00016 #include <hwloc/config.h>
++00017 #include <assert.h>
++00018 
++00019 
++00020 #ifdef __cplusplus
++00021 extern "C" {
++00022 #endif
++00023 
++00024 
++00039 typedef struct hwloc_bitmap_s * hwloc_bitmap_t;
++00040 typedef const struct hwloc_bitmap_s * hwloc_const_bitmap_t;
++00041 
++00042 
++00043 /*
++00044  * Bitmap allocation, freeing and copying.
++00045  */
++00046 
++00053  hwloc_bitmap_t hwloc_bitmap_alloc(void) ;
++00054 
++00056  hwloc_bitmap_t hwloc_bitmap_alloc_full(void) ;
++00057 
++00059  void hwloc_bitmap_free(hwloc_bitmap_t bitmap);
++00060 
++00062  hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap) ;
++00063 
++00065  void hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src);
++00066 
++00067 
++00068 /*
++00069  * Bitmap/String Conversion
++00070  */
++00071 
++00079  int hwloc_bitmap_snprintf(char * restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap);
++00080 
++00086  int hwloc_bitmap_asprintf(char ** strp, hwloc_const_bitmap_t bitmap);
++00087 
++00092  int hwloc_bitmap_sscanf(hwloc_bitmap_t bitmap, const char * restrict string);
++00093 
++00099  int hwloc_bitmap_taskset_snprintf(char * restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap);
++00100 
++00103  int hwloc_bitmap_taskset_asprintf(char ** strp, hwloc_const_bitmap_t bitmap);
++00104 
++00107  int hwloc_bitmap_taskset_sscanf(hwloc_bitmap_t bitmap, const char * restrict string);
++00108 
++00109 
++00110 /*
++00111  * Building bitmaps.
++00112  */
++00113 
++00115  void hwloc_bitmap_zero(hwloc_bitmap_t bitmap);
++00116 
++00118  void hwloc_bitmap_fill(hwloc_bitmap_t bitmap);
++00119 
++00121  void hwloc_bitmap_only(hwloc_bitmap_t bitmap, unsigned id);
++00122 
++00124  void hwloc_bitmap_allbut(hwloc_bitmap_t bitmap, unsigned id);
++00125 
++00127  void hwloc_bitmap_from_ulong(hwloc_bitmap_t bitmap, unsigned long mask);
++00128 
++00130  void hwloc_bitmap_from_ith_ulong(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask);
++00131 
++00132 
++00133 /*
++00134  * Modifying bitmaps.
++00135  */
++00136 
++00138  void hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id);
++00139 
++00141  void hwloc_bitmap_set_range(hwloc_bitmap_t bitmap, unsigned begin, unsigned end);
++00142 
++00144  void hwloc_bitmap_set_ith_ulong(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask);
++00145 
++00147  void hwloc_bitmap_clr(hwloc_bitmap_t bitmap, unsigned id);
++00148 
++00150  void hwloc_bitmap_clr_range(hwloc_bitmap_t bitmap, unsigned begin, unsigned end);
++00151 
++00158  void hwloc_bitmap_singlify(hwloc_bitmap_t bitmap);
++00159 
++00160 
++00161 /*
++00162  * Consulting bitmaps.
++00163  */
++00164 
++00166  unsigned long hwloc_bitmap_to_ulong(hwloc_const_bitmap_t bitmap) ;
++00167 
++00169  unsigned long hwloc_bitmap_to_ith_ulong(hwloc_const_bitmap_t bitmap, unsigned i) ;
++00170 
++00172  int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id) ;
++00173 
++00175  int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap) ;
++00176 
++00178  int hwloc_bitmap_isfull(hwloc_const_bitmap_t bitmap) ;
++00179 
++00184  int hwloc_bitmap_first(hwloc_const_bitmap_t bitmap) ;
++00185 
++00190  int hwloc_bitmap_next(hwloc_const_bitmap_t bitmap, unsigned prev) ;
++00191 
++00196  int hwloc_bitmap_last(hwloc_const_bitmap_t bitmap) ;
++00197 
++00203  int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap) ;
++00204 
++00216 #define hwloc_bitmap_foreach_begin(id, bitmap) \
++00217 do { \
++00218         assert(hwloc_bitmap_weight(bitmap) != -1); \
++00219         for (id = hwloc_bitmap_first(bitmap); \
++00220              (unsigned) id != (unsigned) -1; \
++00221              id = hwloc_bitmap_next(bitmap, id)) { \
++00226 #define hwloc_bitmap_foreach_end() \
++00227         } \
++00228 } while (0)
++00229 
++00230 
++00231 /*
++00232  * Combining bitmaps.
++00233  */
++00234 
++00236  void hwloc_bitmap_or (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2);
++00237 
++00239  void hwloc_bitmap_and (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2);
++00240 
++00242  void hwloc_bitmap_andnot (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2);
++00243 
++00245  void hwloc_bitmap_xor (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2);
++00246 
++00248  void hwloc_bitmap_not (hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap);
++00249 
++00250 
++00251 /*
++00252  * Comparing bitmaps.
++00253  */
++00254 
++00256  int hwloc_bitmap_intersects (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) ;
++00257 
++00259  int hwloc_bitmap_isincluded (hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap) ;
++00260 
++00262  int hwloc_bitmap_isequal (hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) ;
++00263 
++00269  int hwloc_bitmap_compare_first(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) ;
++00270 
++00276  int hwloc_bitmap_compare(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) ;
++00277 
++00281 #ifdef __cplusplus
++00282 } /* extern "C" */
++00283 #endif
++00284 
++00285 
++00286 #endif /* HWLOC_BITMAP_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00069.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00069.html +--- hwloc-1.1/doc/doxygen-doc/html/a00069.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00069.html 2010-12-31 23:48:22.511903158 +0100 +@@ -0,0 +1,78 @@ ++ ++ ++Hardware Locality (hwloc): cuda.h Source File ++ ++ ++ ++ ++

cuda.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2010 INRIA
++00003  * Copyright © 2010 Université Bordeaux 1
++00004  * See COPYING in top-level directory.
++00005  */
++00006 
++00015 #ifndef HWLOC_CUDA_H
++00016 #define HWLOC_CUDA_H
++00017 
++00018 #include <hwloc.h>
++00019 #include <hwloc/config.h>
++00020 #include <hwloc/linux.h>
++00021 
++00022 #include <cuda.h>
++00023 
++00024 
++00025 #ifdef __cplusplus
++00026 extern "C" {
++00027 #endif
++00028 
++00029 
++00042 static inline int
++00043 hwloc_cuda_get_device_cpuset(hwloc_topology_t topology ,
++00044                              CUdevice cudevice, hwloc_cpuset_t set)
++00045 {
++00046 #ifdef HWLOC_LINUX_SYS
++00047   /* If we're on Linux, use the sysfs mechanism to get the local cpus */
++00048 #define HWLOC_CUDA_DEVICE_SYSFS_PATH_MAX 128
++00049   CUresult cres;
++00050   int deviceid;
++00051   int busid;
++00052   char path[HWLOC_CUDA_DEVICE_SYSFS_PATH_MAX];
++00053   FILE *sysfile = NULL;
++00054 
++00055   cres = cuDeviceGetAttribute(&busid, CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, cudevice);
++00056   if (cres != CUDA_SUCCESS) {
++00057     errno = ENOSYS;
++00058     return -1;
++00059   }
++00060   cres = cuDeviceGetAttribute(&deviceid, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID, cudevice);
++00061   if (cres != CUDA_SUCCESS) {
++00062     errno = ENOSYS;
++00063     return -1;
++00064   }
++00065 
++00066   sprintf(path, "/sys/bus/pci/devices/0000:%02x:%02x.0/local_cpus", busid, deviceid);
++00067   sysfile = fopen(path, "r");
++00068   if (!sysfile)
++00069     return -1;
++00070 
++00071   hwloc_linux_parse_cpumap_file(sysfile, set);
++00072 
++00073   fclose(sysfile);
++00074 #else
++00075   /* Non-Linux systems simply get a full cpuset */
++00076   hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
++00077 #endif
++00078   return 0;
++00079 }
++00080 
++00084 #ifdef __cplusplus
++00085 } /* extern "C" */
++00086 #endif
++00087 
++00088 
++00089 #endif /* HWLOC_CUDA_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00070.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00070.html +--- hwloc-1.1/doc/doxygen-doc/html/a00070.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00070.html 2010-12-31 23:48:22.497901444 +0100 +@@ -0,0 +1,72 @@ ++ ++ ++Hardware Locality (hwloc): cudart.h Source File ++ ++ ++ ++ ++

cudart.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2010 INRIA
++00003  * Copyright © 2010 Université Bordeaux 1
++00004  * See COPYING in top-level directory.
++00005  */
++00006 
++00015 #ifndef HWLOC_CUDART_H
++00016 #define HWLOC_CUDART_H
++00017 
++00018 #include <hwloc.h>
++00019 #include <hwloc/config.h>
++00020 #include <hwloc/linux.h>
++00021 
++00022 #include <cuda_runtime_api.h>
++00023 
++00024 
++00025 #ifdef __cplusplus
++00026 extern "C" {
++00027 #endif
++00028 
++00029 
++00042 static inline int
++00043 hwloc_cudart_get_device_cpuset(hwloc_topology_t topology ,
++00044                                int device, hwloc_cpuset_t set)
++00045 {
++00046 #ifdef HWLOC_LINUX_SYS
++00047   /* If we're on Linux, use the sysfs mechanism to get the local cpus */
++00048 #define HWLOC_CUDART_DEVICE_SYSFS_PATH_MAX 128
++00049   cudaError_t cerr;
++00050   struct cudaDeviceProp prop;
++00051   char path[HWLOC_CUDART_DEVICE_SYSFS_PATH_MAX];
++00052   FILE *sysfile = NULL;
++00053 
++00054   cerr = cudaGetDeviceProperties(&prop, device);
++00055   if (cerr) {
++00056     errno = ENOSYS;
++00057     return -1;
++00058   }
++00059 
++00060   sprintf(path, "/sys/bus/pci/devices/0000:%02x:%02x.0/local_cpus", prop.pciBusID, prop.pciDeviceID);
++00061   sysfile = fopen(path, "r");
++00062   if (!sysfile)
++00063     return -1;
++00064 
++00065   hwloc_linux_parse_cpumap_file(sysfile, set);
++00066 
++00067   fclose(sysfile);
++00068 #else
++00069   /* Non-Linux systems simply get a full cpuset */
++00070   hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
++00071 #endif
++00072   return 0;
++00073 }
++00074 
++00078 #ifdef __cplusplus
++00079 } /* extern "C" */
++00080 #endif
++00081 
++00082 
++00083 #endif /* HWLOC_CUDART_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00071.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00071.html +--- hwloc-1.1/doc/doxygen-doc/html/a00071.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00071.html 2010-12-31 23:48:22.574910867 +0100 +@@ -0,0 +1,98 @@ ++ ++ ++Hardware Locality (hwloc): glibc-sched.h Source File ++ ++ ++ ++ ++

glibc-sched.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2009 CNRS
++00003  * Copyright © 2009-2010 INRIA
++00004  * Copyright © 2009-2010 Université Bordeaux 1
++00005  * See COPYING in top-level directory.
++00006  */
++00007 
++00016 #ifndef HWLOC_GLIBC_SCHED_H
++00017 #define HWLOC_GLIBC_SCHED_H
++00018 
++00019 #include <hwloc.h>
++00020 #include <hwloc/helper.h>
++00021 #include <assert.h>
++00022 
++00023 #if !defined _GNU_SOURCE || !defined _SCHED_H
++00024 #error sched.h must be included with _GNU_SOURCE defined
++00025 #endif
++00026 
++00027 
++00028 #ifdef __cplusplus
++00029 extern "C" {
++00030 #endif
++00031 
++00032 
++00033 #ifdef HWLOC_HAVE_CPU_SET
++00034 
++00035 
++00048 static inline int
++00049 hwloc_cpuset_to_glibc_sched_affinity(hwloc_topology_t topology , hwloc_const_cpuset_t hwlocset,
++00050                                     cpu_set_t *schedset, size_t schedsetsize)
++00051 {
++00052 #ifdef CPU_ZERO_S
++00053   unsigned cpu;
++00054   CPU_ZERO_S(schedsetsize, schedset);
++00055   hwloc_bitmap_foreach_begin(cpu, hwlocset)
++00056     CPU_SET_S(cpu, schedsetsize, schedset);
++00057   hwloc_bitmap_foreach_end();
++00058 #else /* !CPU_ZERO_S */
++00059   unsigned cpu;
++00060   CPU_ZERO(schedset);
++00061   assert(schedsetsize == sizeof(cpu_set_t));
++00062   hwloc_bitmap_foreach_begin(cpu, hwlocset)
++00063     CPU_SET(cpu, schedset);
++00064   hwloc_bitmap_foreach_end();
++00065 #endif /* !CPU_ZERO_S */
++00066   return 0;
++00067 }
++00068 
++00076 static inline int
++00077 hwloc_cpuset_from_glibc_sched_affinity(hwloc_topology_t topology , hwloc_cpuset_t hwlocset,
++00078                                        const cpu_set_t *schedset, size_t schedsetsize)
++00079 {
++00080   hwloc_bitmap_zero(hwlocset);
++00081 #ifdef CPU_ZERO_S
++00082   int cpu, count;
++00083   count = CPU_COUNT_S(schedsetsize, schedset);
++00084   cpu = 0;
++00085   while (count) {
++00086     if (CPU_ISSET_S(cpu, schedsetsize, schedset)) {
++00087       hwloc_bitmap_set(hwlocset, cpu);
++00088       count--;
++00089     }
++00090     cpu++;
++00091   }
++00092 #else /* !CPU_ZERO_S */
++00093   /* sched.h does not support dynamic cpu_set_t (introduced in glibc 2.7),
++00094    * assume we have a very old interface without CPU_COUNT (added in 2.6)
++00095    */
++00096   int cpu;
++00097   assert(schedsetsize == sizeof(cpu_set_t));
++00098   for(cpu=0; cpu<CPU_SETSIZE; cpu++)
++00099     if (CPU_ISSET(cpu, schedset))
++00100       hwloc_bitmap_set(hwlocset, cpu);
++00101 #endif /* !CPU_ZERO_S */
++00102   return 0;
++00103 }
++00104 
++00108 #endif /* CPU_SET */
++00109 
++00110 
++00111 #ifdef __cplusplus
++00112 } /* extern "C" */
++00113 #endif
++00114 
++00115 
++00116 #endif /* HWLOC_GLIBC_SCHED_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00072.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00072.html +--- hwloc-1.1/doc/doxygen-doc/html/a00072.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00072.html 2010-12-31 23:48:22.490900588 +0100 +@@ -0,0 +1,601 @@ ++ ++ ++Hardware Locality (hwloc): helper.h Source File ++ ++ ++ ++ ++

helper.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2009 CNRS
++00003  * Copyright © 2009-2010 INRIA
++00004  * Copyright © 2009-2010 Université Bordeaux 1
++00005  * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
++00006  * See COPYING in top-level directory.
++00007  */
++00008 
++00013 #ifndef HWLOC_HELPER_H
++00014 #define HWLOC_HELPER_H
++00015 
++00016 #ifndef HWLOC_H
++00017 #error Please include the main hwloc.h instead
++00018 #endif
++00019 
++00020 #include <stdlib.h>
++00021 #include <errno.h>
++00022 
++00023 
++00024 #ifdef __cplusplus
++00025 extern "C" {
++00026 #endif
++00027 
++00028 
++00039 static inline int 
++00040 hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
++00041 {
++00042   int depth = hwloc_get_type_depth(topology, type);
++00043 
++00044   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN)
++00045     return depth;
++00046 
++00047   /* find the highest existing level with type order >= */
++00048   for(depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PU); ; depth--)
++00049     if (hwloc_compare_types(hwloc_get_depth_type(topology, depth), type) < 0)
++00050       return depth+1;
++00051 
++00052   /* Shouldn't ever happen, as there is always a SYSTEM level with lower order and known depth.  */
++00053   /* abort(); */
++00054 }
++00055 
++00062 static inline int 
++00063 hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
++00064 {
++00065   int depth = hwloc_get_type_depth(topology, type);
++00066 
++00067   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN)
++00068     return depth;
++00069 
++00070   /* find the lowest existing level with type order <= */
++00071   for(depth = 0; ; depth++)
++00072     if (hwloc_compare_types(hwloc_get_depth_type(topology, depth), type) > 0)
++00073       return depth-1;
++00074 
++00075   /* Shouldn't ever happen, as there is always a PU level with higher order and known depth.  */
++00076   /* abort(); */
++00077 }
++00078 
++00093 static inline hwloc_obj_t 
++00094 hwloc_get_root_obj (hwloc_topology_t topology)
++00095 {
++00096   return hwloc_get_obj_by_depth (topology, 0, 0);
++00097 }
++00098 
++00100 static inline hwloc_obj_t 
++00101 hwloc_get_ancestor_obj_by_depth (hwloc_topology_t topology , unsigned depth, hwloc_obj_t obj)
++00102 {
++00103   hwloc_obj_t ancestor = obj;
++00104   if (obj->depth < depth)
++00105     return NULL;
++00106   while (ancestor && ancestor->depth > depth)
++00107     ancestor = ancestor->parent;
++00108   return ancestor;
++00109 }
++00110 
++00112 static inline hwloc_obj_t 
++00113 hwloc_get_ancestor_obj_by_type (hwloc_topology_t topology , hwloc_obj_type_t type, hwloc_obj_t obj)
++00114 {
++00115   hwloc_obj_t ancestor = obj->parent;
++00116   while (ancestor && ancestor->type != type)
++00117     ancestor = ancestor->parent;
++00118   return ancestor;
++00119 }
++00120 
++00125 static inline hwloc_obj_t
++00126 hwloc_get_next_obj_by_depth (hwloc_topology_t topology, unsigned depth, hwloc_obj_t prev)
++00127 {
++00128   if (!prev)
++00129     return hwloc_get_obj_by_depth (topology, depth, 0);
++00130   if (prev->depth != depth)
++00131     return NULL;
++00132   return prev->next_cousin;
++00133 }
++00134 
++00141 static inline hwloc_obj_t
++00142 hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type,
++00143                    hwloc_obj_t prev)
++00144 {
++00145   int depth = hwloc_get_type_depth(topology, type);
++00146   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN || depth == HWLOC_TYPE_DEPTH_MULTIPLE)
++00147     return NULL;
++00148   return hwloc_get_next_obj_by_depth (topology, depth, prev);
++00149 }
++00150 
++00159 static inline hwloc_obj_t 
++00160 hwloc_get_pu_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)
++00161 {
++00162   hwloc_obj_t obj = NULL;
++00163   while ((obj = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_PU, obj)) != NULL)
++00164     if (obj->os_index == os_index)
++00165       return obj;
++00166   return NULL;
++00167 }
++00168 
++00173 static inline hwloc_obj_t
++00174 hwloc_get_next_child (hwloc_topology_t topology , hwloc_obj_t parent, hwloc_obj_t prev)
++00175 {
++00176   if (!prev)
++00177     return parent->first_child;
++00178   if (prev->parent != parent)
++00179     return NULL;
++00180   return prev->next_sibling;
++00181 }
++00182 
++00184 static inline hwloc_obj_t 
++00185 hwloc_get_common_ancestor_obj (hwloc_topology_t topology , hwloc_obj_t obj1, hwloc_obj_t obj2)
++00186 {
++00187   /* the loop isn't so easy since intermediate ancestors may have
++00188    * different depth, causing us to alternate between using obj1->parent
++00189    * and obj2->parent. Also, even if at some point we find ancestors of
++00190    * of the same depth, their ancestors may have different depth again.
++00191    */
++00192   while (obj1 != obj2) {
++00193     while (obj1->depth > obj2->depth)
++00194       obj1 = obj1->parent;
++00195     while (obj2->depth > obj1->depth)
++00196       obj2 = obj2->parent;
++00197     if (obj1 != obj2 && obj1->depth == obj2->depth) {
++00198       obj1 = obj1->parent;
++00199       obj2 = obj2->parent;
++00200     }
++00201   }
++00202   return obj1;
++00203 }
++00204 
++00207 static inline int 
++00208 hwloc_obj_is_in_subtree (hwloc_topology_t topology , hwloc_obj_t obj, hwloc_obj_t subtree_root)
++00209 {
++00210   return hwloc_bitmap_isincluded(obj->cpuset, subtree_root->cpuset);
++00211 }
++00212 
++00229 static inline hwloc_obj_t
++00230 hwloc_get_first_largest_obj_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)
++00231 {
++00232   hwloc_obj_t obj = hwloc_get_root_obj(topology);
++00233   if (!hwloc_bitmap_intersects(obj->cpuset, set))
++00234     return NULL;
++00235   while (!hwloc_bitmap_isincluded(obj->cpuset, set)) {
++00236     /* while the object intersects without being included, look at its children */
++00237     hwloc_obj_t child = NULL;
++00238     while ((child = hwloc_get_next_child(topology, obj, child)) != NULL) {
++00239       if (hwloc_bitmap_intersects(child->cpuset, set))
++00240         break;
++00241     }
++00242     if (!child)
++00243       /* no child intersects, return their father */
++00244       return obj;
++00245     /* found one intersecting child, look at its children */
++00246     obj = child;
++00247   }
++00248   /* obj is included, return it */
++00249   return obj;
++00250 }
++00251 
++00256  int hwloc_get_largest_objs_inside_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00257                                                  hwloc_obj_t * restrict objs, int max);
++00258 
++00265 static inline hwloc_obj_t
++00266 hwloc_get_next_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00267                                            unsigned depth, hwloc_obj_t prev)
++00268 {
++00269   hwloc_obj_t next = hwloc_get_next_obj_by_depth(topology, depth, prev);
++00270   while (next && !hwloc_bitmap_isincluded(next->cpuset, set))
++00271     next = next->next_cousin;
++00272   return next;
++00273 }
++00274 
++00281 static inline hwloc_obj_t
++00282 hwloc_get_next_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00283                                           hwloc_obj_type_t type, hwloc_obj_t prev)
++00284 {
++00285   int depth = hwloc_get_type_depth(topology, type);
++00286   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN || depth == HWLOC_TYPE_DEPTH_MULTIPLE)
++00287     return NULL;
++00288   return hwloc_get_next_obj_inside_cpuset_by_depth(topology, set, depth, prev);
++00289 }
++00290 
++00293 static inline hwloc_obj_t 
++00294 hwloc_get_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00295                                       unsigned depth, unsigned idx)
++00296 {
++00297   unsigned count = 0;
++00298   hwloc_obj_t obj = hwloc_get_obj_by_depth (topology, depth, 0);
++00299   while (obj) {
++00300     if (hwloc_bitmap_isincluded(obj->cpuset, set)) {
++00301       if (count == idx)
++00302         return obj;
++00303       count++;
++00304     }
++00305     obj = obj->next_cousin;
++00306   }
++00307   return NULL;
++00308 }
++00309 
++00316 static inline hwloc_obj_t 
++00317 hwloc_get_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00318                                      hwloc_obj_type_t type, unsigned idx)
++00319 {
++00320   int depth = hwloc_get_type_depth(topology, type);
++00321   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN || depth == HWLOC_TYPE_DEPTH_MULTIPLE)
++00322     return NULL;
++00323   return hwloc_get_obj_inside_cpuset_by_depth(topology, set, depth, idx);
++00324 }
++00325 
++00327 static inline unsigned 
++00328 hwloc_get_nbobjs_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00329                                          unsigned depth)
++00330 {
++00331   hwloc_obj_t obj = hwloc_get_obj_by_depth (topology, depth, 0);
++00332   int count = 0;
++00333   while (obj) {
++00334     if (hwloc_bitmap_isincluded(obj->cpuset, set))
++00335       count++;
++00336     obj = obj->next_cousin;
++00337   }
++00338   return count;
++00339 }
++00340 
++00347 static inline int 
++00348 hwloc_get_nbobjs_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00349                                         hwloc_obj_type_t type)
++00350 {
++00351   int depth = hwloc_get_type_depth(topology, type);
++00352   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN)
++00353     return 0;
++00354   if (depth == HWLOC_TYPE_DEPTH_MULTIPLE)
++00355     return -1; /* FIXME: agregate nbobjs from different levels? */
++00356   return hwloc_get_nbobjs_inside_cpuset_by_depth(topology, set, depth);
++00357 }
++00358 
++00371 static inline hwloc_obj_t 
++00372 hwloc_get_child_covering_cpuset (hwloc_topology_t topology , hwloc_const_cpuset_t set,
++00373                                 hwloc_obj_t parent)
++00374 {
++00375   hwloc_obj_t child;
++00376 
++00377   if (hwloc_bitmap_iszero(set))
++00378     return NULL;
++00379 
++00380   child = parent->first_child;
++00381   while (child) {
++00382     if (hwloc_bitmap_isincluded(set, child->cpuset))
++00383       return child;
++00384     child = child->next_sibling;
++00385   }
++00386   return NULL;
++00387 }
++00388 
++00393 static inline hwloc_obj_t 
++00394 hwloc_get_obj_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
++00395 {
++00396   struct hwloc_obj *current = hwloc_get_root_obj(topology);
++00397 
++00398   if (hwloc_bitmap_iszero(set))
++00399     return NULL;
++00400 
++00401   if (!hwloc_bitmap_isincluded(set, current->cpuset))
++00402     return NULL;
++00403 
++00404   while (1) {
++00405     hwloc_obj_t child = hwloc_get_child_covering_cpuset(topology, set, current);
++00406     if (!child)
++00407       return current;
++00408     current = child;
++00409   }
++00410 }
++00411 
++00412 
++00428 static inline hwloc_obj_t
++00429 hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00430                                             unsigned depth, hwloc_obj_t prev)
++00431 {
++00432   hwloc_obj_t next = hwloc_get_next_obj_by_depth(topology, depth, prev);
++00433   while (next && !hwloc_bitmap_intersects(set, next->cpuset))
++00434     next = next->next_cousin;
++00435   return next;
++00436 }
++00437 
++00450 static inline hwloc_obj_t
++00451 hwloc_get_next_obj_covering_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set,
++00452                                            hwloc_obj_type_t type, hwloc_obj_t prev)
++00453 {
++00454   int depth = hwloc_get_type_depth(topology, type);
++00455   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN || depth == HWLOC_TYPE_DEPTH_MULTIPLE)
++00456     return NULL;
++00457   return hwloc_get_next_obj_covering_cpuset_by_depth(topology, set, depth, prev);
++00458 }
++00459 
++00472 static inline hwloc_obj_t 
++00473 hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
++00474 {
++00475   hwloc_obj_t current = hwloc_get_obj_covering_cpuset(topology, set);
++00476   while (current) {
++00477     if (current->type == HWLOC_OBJ_CACHE)
++00478       return current;
++00479     current = current->parent;
++00480   }
++00481   return NULL;
++00482 }
++00483 
++00488 static inline hwloc_obj_t 
++00489 hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology , hwloc_obj_t obj)
++00490 {
++00491   hwloc_obj_t current = obj->parent;
++00492   while (current) {
++00493     if (!hwloc_bitmap_isequal(current->cpuset, obj->cpuset)
++00494         && current->type == HWLOC_OBJ_CACHE)
++00495       return current;
++00496     current = current->parent;
++00497   }
++00498   return NULL;
++00499 }
++00500 
++00516 /* TODO: rather provide an iterator? Provide a way to know how much should be allocated? By returning the total number of objects instead? */
++00517  unsigned hwloc_get_closest_objs (hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t * restrict objs, unsigned max);
++00518 
++00529 static inline hwloc_obj_t 
++00530 hwloc_get_obj_below_by_type (hwloc_topology_t topology,
++00531                              hwloc_obj_type_t type1, unsigned idx1,
++00532                              hwloc_obj_type_t type2, unsigned idx2)
++00533 {
++00534   hwloc_obj_t obj;
++00535 
++00536   obj = hwloc_get_obj_by_type (topology, type1, idx1);
++00537   if (!obj)
++00538     return NULL;
++00539 
++00540   return hwloc_get_obj_inside_cpuset_by_type(topology, obj->cpuset, type2, idx2);
++00541 }
++00542 
++00558 static inline hwloc_obj_t 
++00559 hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)
++00560 {
++00561   hwloc_obj_t obj = hwloc_get_root_obj(topology);
++00562   int i;
++00563 
++00564   for(i=0; i<nr; i++) {
++00565     obj = hwloc_get_obj_inside_cpuset_by_type(topology, obj->cpuset, typev[i], idxv[i]);
++00566     if (!obj)
++00567       return NULL;
++00568   }
++00569 
++00570   return obj;
++00571 }
++00572 
++00594 static inline void
++00595 hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *root, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until);
++00596 static inline void
++00597 hwloc_distribute(hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
++00598 {
++00599   unsigned i;
++00600 
++00601   if (!root->arity || n == 1 || root->depth >= until) {
++00602     /* Got to the bottom, we can't split any more, put everything there.  */
++00603     for (i=0; i<n; i++)
++00604       cpuset[i] = hwloc_bitmap_dup(root->cpuset);
++00605     return;
++00606   }
++00607 
++00608   hwloc_distributev(topology, root->children, root->arity, cpuset, n, until);
++00609 }
++00610 
++00616 static inline void
++00617 hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
++00618 {
++00619   unsigned i;
++00620   unsigned tot_weight;
++00621   hwloc_cpuset_t *cpusetp = cpuset;
++00622 
++00623   tot_weight = 0;
++00624   for (i = 0; i < n_roots; i++)
++00625     tot_weight += hwloc_bitmap_weight(roots[i]->cpuset);
++00626 
++00627   for (i = 0; i < n_roots; i++) {
++00628     /* Give to roots[i] a portion proportional to its weight */
++00629     unsigned weight = hwloc_bitmap_weight(roots[i]->cpuset);
++00630     unsigned chunk = (n * weight + tot_weight-1) / tot_weight;
++00631     hwloc_distribute(topology, roots[i], cpusetp, chunk, until);
++00632     cpusetp += chunk;
++00633     tot_weight -= weight;
++00634     n -= chunk;
++00635   }
++00636 }
++00637 
++00644 static inline void *
++00645 hwloc_alloc_membind_policy_nodeset(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
++00646 {
++00647   void *p = hwloc_alloc_membind_nodeset(topology, len, nodeset, policy, flags);
++00648   if (p)
++00649     return p;
++00650   hwloc_set_membind_nodeset(topology, nodeset, policy, flags);
++00651   p = hwloc_alloc(topology, len);
++00652   if (p && policy != HWLOC_MEMBIND_FIRSTTOUCH)
++00653     /* Enforce the binding by touching the data */
++00654     memset(p, 0, len);
++00655   return p;
++00656 }
++00657 
++00662 static inline void *
++00663 hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags)
++00664 {
++00665   void *p = hwloc_alloc_membind(topology, len, cpuset, policy, flags);
++00666   if (p)
++00667     return p;
++00668   hwloc_set_membind(topology, cpuset, policy, flags);
++00669   p = hwloc_alloc(topology, len);
++00670   if (p && policy != HWLOC_MEMBIND_FIRSTTOUCH)
++00671     /* Enforce the binding by touching the data */
++00672     memset(p, 0, len);
++00673   return p;
++00674 }
++00675 
++00683 /* \brief Get complete CPU set
++00684  *
++00685  * \return the complete CPU set of logical processors of the system. If the
++00686  * topology is the result of a combination of several systems, NULL is
++00687  * returned.
++00688  *
++00689  * \note The returned cpuset is not newly allocated and should thus not be
++00690  * changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
++00691  */
++00692 static inline hwloc_const_cpuset_t 
++00693 hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)
++00694 {
++00695   return hwloc_get_root_obj(topology)->complete_cpuset;
++00696 }
++00697 
++00698 /* \brief Get topology CPU set
++00699  *
++00700  * \return the CPU set of logical processors of the system for which hwloc
++00701  * provides topology information. This is equivalent to the cpuset of the
++00702  * system object. If the topology is the result of a combination of several
++00703  * systems, NULL is returned.
++00704  *
++00705  * \note The returned cpuset is not newly allocated and should thus not be
++00706  * changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
++00707  */
++00708 static inline hwloc_const_cpuset_t 
++00709 hwloc_topology_get_topology_cpuset(hwloc_topology_t topology)
++00710 {
++00711   return hwloc_get_root_obj(topology)->cpuset;
++00712 }
++00713 
++00723 static inline hwloc_const_cpuset_t 
++00724 hwloc_topology_get_online_cpuset(hwloc_topology_t topology)
++00725 {
++00726   return hwloc_get_root_obj(topology)->online_cpuset;
++00727 }
++00728 
++00738 static inline hwloc_const_cpuset_t 
++00739 hwloc_topology_get_allowed_cpuset(hwloc_topology_t topology)
++00740 {
++00741   return hwloc_get_root_obj(topology)->allowed_cpuset;
++00742 }
++00743 
++00751 /* \brief Get complete node set
++00752  *
++00753  * \return the complete node set of memory of the system. If the
++00754  * topology is the result of a combination of several systems, NULL is
++00755  * returned.
++00756  *
++00757  * \note The returned nodeset is not newly allocated and should thus not be
++00758  * changed or freed; hwloc_nodeset_dup must be used to obtain a local copy.
++00759  */
++00760 static inline hwloc_const_nodeset_t 
++00761 hwloc_topology_get_complete_nodeset(hwloc_topology_t topology)
++00762 {
++00763   return hwloc_get_root_obj(topology)->complete_nodeset;
++00764 }
++00765 
++00766 /* \brief Get topology node set
++00767  *
++00768  * \return the node set of memory of the system for which hwloc
++00769  * provides topology information. This is equivalent to the nodeset of the
++00770  * system object. If the topology is the result of a combination of several
++00771  * systems, NULL is returned.
++00772  *
++00773  * \note The returned nodeset is not newly allocated and should thus not be
++00774  * changed or freed; hwloc_nodeset_dup must be used to obtain a local copy.
++00775  */
++00776 static inline hwloc_const_nodeset_t 
++00777 hwloc_topology_get_topology_nodeset(hwloc_topology_t topology)
++00778 {
++00779   return hwloc_get_root_obj(topology)->nodeset;
++00780 }
++00781 
++00791 static inline hwloc_const_nodeset_t 
++00792 hwloc_topology_get_allowed_nodeset(hwloc_topology_t topology)
++00793 {
++00794   return hwloc_get_root_obj(topology)->allowed_nodeset;
++00795 }
++00796 
++00827 static inline void
++00828 hwloc_cpuset_to_nodeset(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_nodeset_t nodeset)
++00829 {
++00830         int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00831         hwloc_obj_t obj;
++00832 
++00833         if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
++00834                  if (hwloc_bitmap_iszero(cpuset))
++00835                         hwloc_bitmap_zero(nodeset);
++00836                 else
++00837                         /* Assume the whole system */
++00838                         hwloc_bitmap_fill(nodeset);
++00839                 return;
++00840         }
++00841 
++00842         hwloc_bitmap_zero(nodeset);
++00843         obj = NULL;
++00844         while ((obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, cpuset, depth, obj)) != NULL)
++00845                 hwloc_bitmap_set(nodeset, obj->os_index);
++00846 }
++00847 
++00855 static inline void
++00856 hwloc_cpuset_to_nodeset_strict(struct hwloc_topology *topology, hwloc_const_cpuset_t cpuset, hwloc_nodeset_t nodeset)
++00857 {
++00858         int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00859         hwloc_obj_t obj;
++00860         if (depth == HWLOC_TYPE_DEPTH_UNKNOWN )
++00861                 return;
++00862         hwloc_bitmap_zero(nodeset);
++00863         obj = NULL;
++00864         while ((obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, cpuset, depth, obj)) != NULL)
++00865                 hwloc_bitmap_set(nodeset, obj->os_index);
++00866 }
++00867 
++00876 static inline void
++00877 hwloc_cpuset_from_nodeset(hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_const_nodeset_t nodeset)
++00878 {
++00879         int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00880         hwloc_obj_t obj;
++00881 
++00882         if (depth == HWLOC_TYPE_DEPTH_UNKNOWN ) {
++00883                 if (hwloc_bitmap_iszero(nodeset))
++00884                         hwloc_bitmap_zero(cpuset);
++00885                 else
++00886                         /* Assume the whole system */
++00887                         hwloc_bitmap_fill(cpuset);
++00888                 return;
++00889         }
++00890 
++00891         hwloc_bitmap_zero(cpuset);
++00892         obj = NULL;
++00893         while ((obj = hwloc_get_next_obj_by_depth(topology, depth, obj)) != NULL) {
++00894                 if (hwloc_bitmap_isset(nodeset, obj->os_index))
++00895                         hwloc_bitmap_or(cpuset, cpuset, obj->cpuset);
++00896         }
++00897 }
++00898 
++00906 static inline void
++00907 hwloc_cpuset_from_nodeset_strict(struct hwloc_topology *topology, hwloc_cpuset_t cpuset, hwloc_const_nodeset_t nodeset)
++00908 {
++00909         int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00910         hwloc_obj_t obj;
++00911         if (depth == HWLOC_TYPE_DEPTH_UNKNOWN )
++00912                 return;
++00913         hwloc_bitmap_zero(cpuset);
++00914         obj = NULL;
++00915         while ((obj = hwloc_get_next_obj_by_depth(topology, depth, obj)) != NULL)
++00916                 if (hwloc_bitmap_isset(nodeset, obj->os_index))
++00917                         hwloc_bitmap_or(cpuset, cpuset, obj->cpuset);
++00918 }
++00919 
++00924 #ifdef __cplusplus
++00925 } /* extern "C" */
++00926 #endif
++00927 
++00928 
++00929 #endif /* HWLOC_HELPER_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00073.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00073.html +--- hwloc-1.1/doc/doxygen-doc/html/a00073.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00073.html 2010-12-31 23:48:22.506902546 +0100 +@@ -0,0 +1,375 @@ ++ ++ ++Hardware Locality (hwloc): hwloc.h Source File ++ ++ ++ ++ ++

hwloc.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2009 CNRS
++00003  * Copyright © 2009-2010 INRIA
++00004  * Copyright © 2009-2010 Université Bordeaux 1
++00005  * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
++00006  * See COPYING in top-level directory.
++00007  */
++00008 
++00016 #ifndef HWLOC_H
++00017 #define HWLOC_H
++00018 
++00019 #include <hwloc/config.h>
++00020 #include <sys/types.h>
++00021 #include <stdio.h>
++00022 #include <string.h>
++00023 #include <limits.h>
++00024 #ifdef HWLOC_HAVE_STDINT_H
++00025 #include <stdint.h>
++00026 #endif
++00027 
++00028 /*
++00029  * Symbol transforms
++00030  */
++00031 #include <hwloc/rename.h>
++00032 
++00033 /*
++00034  * Bitmap definitions
++00035  */
++00036 
++00037 #include <hwloc/bitmap.h>
++00038 #include <hwloc/cpuset.h>
++00039 
++00040 
++00041 #ifdef __cplusplus
++00042 extern "C" {
++00043 #endif
++00044 
++00045 
++00051 #define HWLOC_API_VERSION 0x00010100
++00052 
++00061 struct hwloc_topology;
++00066 typedef struct hwloc_topology * hwloc_topology_t;
++00067 
++00080 typedef hwloc_bitmap_t hwloc_cpuset_t;
++00082 typedef hwloc_const_bitmap_t hwloc_const_cpuset_t;
++00083 
++00095 typedef hwloc_bitmap_t hwloc_nodeset_t;
++00098 typedef hwloc_const_bitmap_t hwloc_const_nodeset_t;
++00099 
++00114 typedef enum {
++00115   HWLOC_OBJ_SYSTEM,     
++00120   HWLOC_OBJ_MACHINE,    
++00125   HWLOC_OBJ_NODE,       
++00129   HWLOC_OBJ_SOCKET,     
++00133   HWLOC_OBJ_CACHE,      
++00136   HWLOC_OBJ_CORE,       
++00140   HWLOC_OBJ_PU,         
++00149   HWLOC_OBJ_GROUP,      
++00161   HWLOC_OBJ_MISC        
++00165 } hwloc_obj_type_t;
++00166 
++00184  int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2) ;
++00185 
++00186 enum hwloc_compare_types_e {
++00187     HWLOC_TYPE_UNORDERED = INT_MAX      
++00188 };
++00189 
++00198 union hwloc_obj_attr_u;
++00199 
++00201 struct hwloc_obj_memory_s {
++00202   uint64_t total_memory; 
++00203   uint64_t local_memory; 
++00205   unsigned page_types_len; 
++00211   struct hwloc_obj_memory_page_type_s {
++00212     uint64_t size;      
++00213     uint64_t count;     
++00214   } * page_types;
++00215 };
++00216 
++00221 struct hwloc_obj {
++00222   /* physical information */
++00223   hwloc_obj_type_t type;                
++00224   unsigned os_index;                    
++00225   char *name;                           
++00227   struct hwloc_obj_memory_s memory;     
++00229   union hwloc_obj_attr_u *attr;         
++00232   /* global position */
++00233   unsigned depth;                       
++00234   unsigned logical_index;               
++00236   signed os_level;                      
++00238   struct hwloc_obj *next_cousin;        
++00239   struct hwloc_obj *prev_cousin;        
++00241   /* parent */
++00242   struct hwloc_obj *parent;             
++00243   unsigned sibling_rank;                
++00244   struct hwloc_obj *next_sibling;       
++00245   struct hwloc_obj *prev_sibling;       
++00247   /* children */
++00248   unsigned arity;                       
++00249   struct hwloc_obj **children;          
++00250   struct hwloc_obj *first_child;        
++00251   struct hwloc_obj *last_child;         
++00253   /* misc */
++00254   void *userdata;                       
++00256   /* cpusets and nodesets */
++00257   hwloc_cpuset_t cpuset;                
++00270   hwloc_cpuset_t complete_cpuset;       
++00281   hwloc_cpuset_t online_cpuset;         
++00289   hwloc_cpuset_t allowed_cpuset;        
++00300   hwloc_nodeset_t nodeset;              
++00317   hwloc_nodeset_t complete_nodeset;     
++00331   hwloc_nodeset_t allowed_nodeset;      
++00344   struct hwloc_obj_info_s *infos;       
++00345   unsigned infos_count;                 
++00346 };
++00350 typedef struct hwloc_obj * hwloc_obj_t;
++00351 
++00353 union hwloc_obj_attr_u {
++00355   struct hwloc_cache_attr_s {
++00356     uint64_t size;                        
++00357     unsigned depth;                       
++00358     unsigned linesize;                    
++00359   } cache;
++00361   struct hwloc_group_attr_s {
++00362     unsigned depth;                       
++00363   } group;
++00364 };
++00365 
++00367 struct hwloc_obj_info_s {
++00368   char *name;   
++00369   char *value;  
++00370 };
++00371 
++00386  int hwloc_topology_init (hwloc_topology_t *topologyp);
++00387 
++00400  int hwloc_topology_load(hwloc_topology_t topology);
++00401 
++00406  void hwloc_topology_destroy (hwloc_topology_t topology);
++00407 
++00412  void hwloc_topology_check(hwloc_topology_t topology);
++00413 
++00446  int hwloc_topology_ignore_type(hwloc_topology_t topology, hwloc_obj_type_t type);
++00447 
++00454  int hwloc_topology_ignore_type_keep_structure(hwloc_topology_t topology, hwloc_obj_type_t type);
++00455 
++00461  int hwloc_topology_ignore_all_keep_structure(hwloc_topology_t topology);
++00462 
++00467 enum hwloc_topology_flags_e {
++00468   HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM = (1<<0),
++00477   HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM = (1<<1)
++00496 };
++00497 
++00502  int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
++00503 
++00517  int hwloc_topology_set_fsroot(hwloc_topology_t restrict topology, const char * restrict fsroot_path);
++00518 
++00532  int hwloc_topology_set_pid(hwloc_topology_t restrict topology, hwloc_pid_t pid);
++00533 
++00547  int hwloc_topology_set_synthetic(hwloc_topology_t restrict topology, const char * restrict description);
++00548 
++00560  int hwloc_topology_set_xml(hwloc_topology_t restrict topology, const char * restrict xmlpath);
++00561 
++00567  int hwloc_topology_set_xmlbuffer(hwloc_topology_t restrict topology, const char * restrict buffer, int size);
++00568 
++00570 struct hwloc_topology_discovery_support {
++00572   unsigned char pu;
++00573 };
++00574 
++00576 struct hwloc_topology_cpubind_support {
++00578   unsigned char set_thisproc_cpubind;
++00580   unsigned char get_thisproc_cpubind;
++00582   unsigned char set_proc_cpubind;
++00584   unsigned char get_proc_cpubind;
++00586   unsigned char set_thisthread_cpubind;
++00588   unsigned char get_thisthread_cpubind;
++00590   unsigned char set_thread_cpubind;
++00592   unsigned char get_thread_cpubind;
++00593 };
++00594 
++00596 struct hwloc_topology_membind_support {
++00598   unsigned char set_thisproc_membind;
++00600   unsigned char get_thisproc_membind;
++00602   unsigned char set_proc_membind;
++00604   unsigned char get_proc_membind;
++00606   unsigned char set_thisthread_membind;
++00608   unsigned char get_thisthread_membind;
++00610   unsigned char set_area_membind;
++00612   unsigned char get_area_membind;
++00614   unsigned char alloc_membind;
++00616   unsigned char firsttouch_membind;
++00618   unsigned char bind_membind;
++00620   unsigned char interleave_membind;
++00622   unsigned char replicate_membind;
++00624   unsigned char nexttouch_membind;
++00625 
++00627   unsigned char migrate_membind;
++00628 };
++00629 
++00636 struct hwloc_topology_support {
++00637   struct hwloc_topology_discovery_support *discovery;
++00638   struct hwloc_topology_cpubind_support *cpubind;
++00639   struct hwloc_topology_membind_support *membind;
++00640 };
++00641 
++00643  const struct hwloc_topology_support *hwloc_topology_get_support(hwloc_topology_t restrict topology);
++00644 
++00657  void hwloc_topology_export_xml(hwloc_topology_t topology, const char *xmlpath);
++00658 
++00665  void hwloc_topology_export_xmlbuffer(hwloc_topology_t topology, char **xmlbuffer, int *buflen);
++00666 
++00676  hwloc_obj_t hwloc_topology_insert_misc_object_by_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, const char *name);
++00677 
++00687  hwloc_obj_t hwloc_topology_insert_misc_object_by_parent(hwloc_topology_t topology, hwloc_obj_t parent, const char *name);
++00688 
++00701  unsigned hwloc_topology_get_depth(hwloc_topology_t restrict topology) ;
++00702 
++00712  int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type);
++00713 
++00714 enum hwloc_get_type_depth_e {
++00715     HWLOC_TYPE_DEPTH_UNKNOWN = -1, 
++00716     HWLOC_TYPE_DEPTH_MULTIPLE = -2 
++00717 };
++00718 
++00723  hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, unsigned depth) ;
++00724 
++00726  unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, unsigned depth) ;
++00727 
++00733 static inline int 
++00734 hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type)
++00735 {
++00736         int depth = hwloc_get_type_depth(topology, type);
++00737         if (depth == HWLOC_TYPE_DEPTH_UNKNOWN)
++00738                 return 0;
++00739         if (depth == HWLOC_TYPE_DEPTH_MULTIPLE)
++00740                 return -1; /* FIXME: agregate nbobjs from different levels? */
++00741         return hwloc_get_nbobjs_by_depth(topology, depth);
++00742 }
++00743 
++00751  int hwloc_topology_is_thissystem(hwloc_topology_t  restrict topology) ;
++00752 
++00762  hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, unsigned depth, unsigned idx) ;
++00763 
++00770 static inline hwloc_obj_t 
++00771 hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)
++00772 {
++00773   int depth = hwloc_get_type_depth(topology, type);
++00774   if (depth == HWLOC_TYPE_DEPTH_UNKNOWN)
++00775     return NULL;
++00776   if (depth == HWLOC_TYPE_DEPTH_MULTIPLE)
++00777     return NULL;
++00778   return hwloc_get_obj_by_depth(topology, depth, idx);
++00779 }
++00780 
++00790  const char * hwloc_obj_type_string (hwloc_obj_type_t type) ;
++00791 
++00796  hwloc_obj_type_t hwloc_obj_type_of_string (const char * string) ;
++00797 
++00806  int hwloc_obj_type_snprintf(char * restrict string, size_t size, hwloc_obj_t obj,
++00807                                    int verbose);
++00808 
++00818  int hwloc_obj_attr_snprintf(char * restrict string, size_t size, hwloc_obj_t obj, const char * restrict separator,
++00819                                    int verbose);
++00820 
++00839  int hwloc_obj_snprintf(char * restrict string, size_t size,
++00840                              hwloc_topology_t topology, hwloc_obj_t obj,
++00841                              const char * restrict indexprefix, int verbose);
++00842 
++00846  int hwloc_obj_cpuset_snprintf(char * restrict str, size_t size, size_t nobj, const hwloc_obj_t * restrict objs);
++00847 
++00852 static inline char * 
++00853 hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)
++00854 {
++00855   unsigned i;
++00856   for(i=0; i<obj->infos_count; i++)
++00857     if (!strcmp(obj->infos[i].name, name))
++00858       return obj->infos[i].value;
++00859   return NULL;
++00860 }
++00861 
++00913 typedef enum {
++00914   HWLOC_CPUBIND_PROCESS = (1<<0), 
++00917   HWLOC_CPUBIND_THREAD = (1<<1),  
++00919   HWLOC_CPUBIND_STRICT = (1<<2),  
++00947   HWLOC_CPUBIND_NOMEMBIND = (1<<3)
++00961 } hwloc_cpubind_flags_t;
++00962 
++00968  int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags);
++00969 
++00972  int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
++00973 
++00981  int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
++00982 
++00990  int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
++00991 
++00992 #ifdef hwloc_thread_t
++00993 
++01000  int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_const_cpuset_t set, int flags);
++01001 #endif
++01002 
++01003 #ifdef hwloc_thread_t
++01004 
++01011  int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int flags);
++01012 #endif
++01013 
++01054 typedef enum {
++01055   HWLOC_MEMBIND_DEFAULT =       0,      
++01057   HWLOC_MEMBIND_FIRSTTOUCH =    1,      
++01060   HWLOC_MEMBIND_BIND =          2,      
++01062   HWLOC_MEMBIND_INTERLEAVE =    3,      
++01064   HWLOC_MEMBIND_REPLICATE =     4,      
++01066   HWLOC_MEMBIND_NEXTTOUCH =     5       
++01069 } hwloc_membind_policy_t;
++01070 
++01077 typedef enum {
++01078   HWLOC_MEMBIND_PROCESS =       (1<<0), 
++01081   HWLOC_MEMBIND_THREAD =        (1<<1), 
++01084   HWLOC_MEMBIND_STRICT =        (1<<2), 
++01089   HWLOC_MEMBIND_MIGRATE =       (1<<3), 
++01093   HWLOC_MEMBIND_NOCPUBIND =     (1<<4)  
++01106 } hwloc_membind_flags_t;
++01107 
++01113  int hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
++01114 
++01120  int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
++01121 
++01124  int hwloc_get_membind_nodeset(hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
++01125 
++01128  int hwloc_get_membind(hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
++01129 
++01135  int hwloc_set_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
++01136 
++01142  int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
++01143 
++01146  int hwloc_get_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
++01147 
++01150  int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
++01151 
++01157  int hwloc_set_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
++01158 
++01164  int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
++01165 
++01168  int hwloc_get_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
++01169 
++01172  int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
++01173 
++01181  void *hwloc_alloc(hwloc_topology_t topology, size_t len);
++01182 
++01192  void *hwloc_alloc_membind_nodeset(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags) ;
++01193 
++01203  void *hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags) ;
++01204 
++01207  int hwloc_free(hwloc_topology_t topology, void *addr, size_t len);
++01208 
++01212 #ifdef __cplusplus
++01213 } /* extern "C" */
++01214 #endif
++01215 
++01216 
++01217 /* high-level helpers */
++01218 #include <hwloc/helper.h>
++01219 
++01220 
++01221 #endif /* HWLOC_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00074.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00074.html +--- hwloc-1.1/doc/doxygen-doc/html/a00074.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00074.html 2010-12-31 23:48:22.536906218 +0100 +@@ -0,0 +1,358 @@ ++ ++ ++Hardware Locality (hwloc): linux-libnuma.h Source File ++ ++ ++ ++ ++

linux-libnuma.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2009 CNRS
++00003  * Copyright © 2009-2010 INRIA
++00004  * Copyright © 2009-2010 Université Bordeaux 1
++00005  * See COPYING in top-level directory.
++00006  */
++00007 
++00015 #ifndef HWLOC_LINUX_LIBNUMA_H
++00016 #define HWLOC_LINUX_LIBNUMA_H
++00017 
++00018 #include <hwloc.h>
++00019 #include <numa.h>
++00020 
++00021 
++00022 #ifdef __cplusplus
++00023 extern "C" {
++00024 #endif
++00025 
++00026 
++00042 static inline int
++00043 hwloc_cpuset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset,
++00044                                     unsigned long *mask, unsigned long *maxnode)
++00045 {
++00046   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00047   unsigned long outmaxnode = -1;
++00048 
++00049   /* round-up to the next ulong and clear all bytes */
++00050   *maxnode = (*maxnode + 8*sizeof(*mask) - 1) & ~(8*sizeof(*mask) - 1);
++00051   memset(mask, 0, *maxnode/8);
++00052 
++00053   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00054     hwloc_obj_t node = NULL;
++00055     while ((node = hwloc_get_next_obj_covering_cpuset_by_type(topology, cpuset, HWLOC_OBJ_NODE, node)) != NULL) {
++00056       if (node->os_index >= *maxnode)
++00057         continue;
++00058       mask[node->os_index/sizeof(*mask)/8] |= 1UL << (node->os_index % (sizeof(*mask)*8));
++00059       if (outmaxnode == (unsigned long) -1 || outmaxnode < node->os_index)
++00060         outmaxnode = node->os_index;
++00061     }
++00062 
++00063   } else {
++00064     /* if no numa, libnuma assumes we have a single node */
++00065     if (!hwloc_bitmap_iszero(cpuset)) {
++00066       mask[0] = 1;
++00067       outmaxnode = 0;
++00068     }
++00069   }
++00070 
++00071   *maxnode = outmaxnode+1;
++00072   return 0;
++00073 }
++00074 
++00085 static inline int
++00086 hwloc_nodeset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset,
++00087                                       unsigned long *mask, unsigned long *maxnode)
++00088 {
++00089   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00090   unsigned long outmaxnode = -1;
++00091 
++00092   /* round-up to the next ulong and clear all bytes */
++00093   *maxnode = (*maxnode + 8*sizeof(*mask) - 1) & ~(8*sizeof(*mask) - 1);
++00094   memset(mask, 0, *maxnode/8);
++00095 
++00096   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00097     hwloc_obj_t node = NULL;
++00098     while ((node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, node)) != NULL) {
++00099       if (node->os_index >= *maxnode)
++00100         continue;
++00101       if (!hwloc_bitmap_isset(nodeset, node->os_index))
++00102         continue;
++00103       mask[node->os_index/sizeof(*mask)/8] |= 1UL << (node->os_index % (sizeof(*mask)*8));
++00104       if (outmaxnode == (unsigned long) -1 || outmaxnode < node->os_index)
++00105         outmaxnode = node->os_index;
++00106     }
++00107 
++00108   } else {
++00109     /* if no numa, libnuma assumes we have a single node */
++00110     if (!hwloc_bitmap_iszero(nodeset)) {
++00111       mask[0] = 1;
++00112       outmaxnode = 0;
++00113     }
++00114   }
++00115 
++00116   *maxnode = outmaxnode+1;
++00117   return 0;
++00118 }
++00119 
++00129 static inline int
++00130 hwloc_cpuset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
++00131                                       const unsigned long *mask, unsigned long maxnode)
++00132 {
++00133   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00134 
++00135   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00136     hwloc_obj_t node;
++00137     unsigned i;
++00138     hwloc_bitmap_zero(cpuset);
++00139     for(i=0; i<maxnode; i++)
++00140       if (mask[i/sizeof(*mask)/8] & (1UL << (i% (sizeof(*mask)*8)))) {
++00141         node = hwloc_get_obj_by_depth(topology, depth, i);
++00142         if (node)
++00143           hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
++00144       }
++00145   } else {
++00146     /* if no numa, libnuma assumes we have a single node */
++00147     if (mask[0] & 1)
++00148       hwloc_bitmap_copy(cpuset, hwloc_topology_get_complete_cpuset(topology));
++00149     else
++00150       hwloc_bitmap_zero(cpuset);
++00151   }
++00152 
++00153   return 0;
++00154 }
++00155 
++00165 static inline int
++00166 hwloc_nodeset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_nodeset_t nodeset,
++00167                                         const unsigned long *mask, unsigned long maxnode)
++00168 {
++00169   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00170 
++00171   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00172     hwloc_obj_t node;
++00173     unsigned i;
++00174     hwloc_bitmap_zero(nodeset);
++00175     for(i=0; i<maxnode; i++)
++00176       if (mask[i/sizeof(*mask)/8] & (1UL << (i% (sizeof(*mask)*8)))) {
++00177         node = hwloc_get_obj_by_depth(topology, depth, i);
++00178         if (node)
++00179           hwloc_bitmap_set(nodeset, node->os_index);
++00180       }
++00181   } else {
++00182     /* if no numa, libnuma assumes we have a single node */
++00183     if (mask[0] & 1)
++00184       hwloc_bitmap_fill(nodeset);
++00185     else
++00186       hwloc_bitmap_zero(nodeset);
++00187   }
++00188 
++00189   return 0;
++00190 }
++00191 
++00210 static inline struct bitmask * 
++00211 hwloc_cpuset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)
++00212 {
++00213   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00214   struct bitmask *bitmask = numa_allocate_cpumask();
++00215   if (!bitmask)
++00216     return NULL;
++00217 
++00218   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00219     hwloc_obj_t node = NULL;
++00220     while ((node = hwloc_get_next_obj_covering_cpuset_by_type(topology, cpuset, HWLOC_OBJ_NODE, node)) != NULL)
++00221       numa_bitmask_setbit(bitmask, node->os_index);
++00222   } else {
++00223     /* if no numa, libnuma assumes we have a single node */
++00224     if (!hwloc_bitmap_iszero(cpuset))
++00225       numa_bitmask_setbit(bitmask, 0);
++00226   }
++00227 
++00228   return bitmask;
++00229 }
++00230 
++00240 static inline struct bitmask * 
++00241 hwloc_nodeset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)
++00242 {
++00243   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00244   struct bitmask *bitmask = numa_allocate_cpumask();
++00245   if (!bitmask)
++00246     return NULL;
++00247 
++00248   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00249     hwloc_obj_t node = NULL;
++00250     while ((node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, node)) != NULL)
++00251       if (hwloc_bitmap_isset(nodeset, node->os_index))
++00252         numa_bitmask_setbit(bitmask, node->os_index);
++00253   } else {
++00254     /* if no numa, libnuma assumes we have a single node */
++00255     if (!hwloc_bitmap_iszero(nodeset))
++00256       numa_bitmask_setbit(bitmask, 0);
++00257   }
++00258 
++00259   return bitmask;
++00260 }
++00261 
++00267 static inline int
++00268 hwloc_cpuset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
++00269                                         const struct bitmask *bitmask)
++00270 {
++00271   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00272 
++00273   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00274     hwloc_obj_t node;
++00275     int i;
++00276     hwloc_bitmap_zero(cpuset);
++00277     for(i=0; i<NUMA_NUM_NODES; i++)
++00278       if (numa_bitmask_isbitset(bitmask, i)) {
++00279         node = hwloc_get_obj_by_depth(topology, depth, i);
++00280         if (node)
++00281           hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
++00282       }
++00283   } else {
++00284     /* if no numa, libnuma assumes we have a single node */
++00285     if (numa_bitmask_isbitset(bitmask, 0))
++00286       hwloc_bitmap_copy(cpuset, hwloc_topology_get_complete_cpuset(topology));
++00287     else
++00288       hwloc_bitmap_zero(cpuset);
++00289   }
++00290 
++00291   return 0;
++00292 }
++00293 
++00299 static inline int
++00300 hwloc_nodeset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_nodeset_t nodeset,
++00301                                          const struct bitmask *bitmask)
++00302 {
++00303   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00304 
++00305   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00306     hwloc_obj_t node;
++00307     int i;
++00308     hwloc_bitmap_zero(nodeset);
++00309     for(i=0; i<NUMA_NUM_NODES; i++)
++00310       if (numa_bitmask_isbitset(bitmask, i)) {
++00311         node = hwloc_get_obj_by_depth(topology, depth, i);
++00312         if (node)
++00313           hwloc_bitmap_set(nodeset, node->os_index);
++00314       }
++00315   } else {
++00316     /* if no numa, libnuma assumes we have a single node */
++00317     if (numa_bitmask_isbitset(bitmask, 0))
++00318       hwloc_bitmap_fill(nodeset);
++00319     else
++00320       hwloc_bitmap_zero(nodeset);
++00321   }
++00322 
++00323   return 0;
++00324 }
++00325 
++00330 #ifdef NUMA_VERSION1_COMPATIBILITY
++00331 
++00341 static inline int
++00342 hwloc_cpuset_to_linux_libnuma_nodemask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset,
++00343                                       nodemask_t *nodemask)
++00344 {
++00345   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00346 
++00347   nodemask_zero(nodemask);
++00348 
++00349   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00350     hwloc_obj_t node = NULL;
++00351     while ((node = hwloc_get_next_obj_covering_cpuset_by_type(topology, cpuset, HWLOC_OBJ_NODE, node)) != NULL)
++00352       nodemask_set(nodemask, node->os_index);
++00353   } else {
++00354     /* if no numa, libnuma assumes we have a single node */
++00355     if (!hwloc_bitmap_iszero(cpuset))
++00356       nodemask_set(nodemask, 0);
++00357   }
++00358 
++00359   return 0;
++00360 }
++00361 
++00367 static inline int
++00368 hwloc_nodeset_to_linux_libnuma_nodemask(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset,
++00369                                         nodemask_t *nodemask)
++00370 {
++00371   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00372 
++00373   nodemask_zero(nodemask);
++00374 
++00375   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00376     hwloc_obj_t node = NULL;
++00377     while ((node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, node)) != NULL)
++00378       if (hwloc_bitmap_isset(nodeset, node->os_index))
++00379         nodemask_set(nodemask, node->os_index);
++00380   } else {
++00381     /* if no numa, libnuma assumes we have a single node */
++00382     if (!hwloc_bitmap_iszero(nodeset))
++00383       nodemask_set(nodemask, 0);
++00384   }
++00385 
++00386   return 0;
++00387 }
++00388 
++00394 static inline int
++00395 hwloc_cpuset_from_linux_libnuma_nodemask(hwloc_topology_t topology, hwloc_cpuset_t cpuset,
++00396                                         const nodemask_t *nodemask)
++00397 {
++00398   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00399 
++00400   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00401     hwloc_obj_t node;
++00402     int i;
++00403     hwloc_bitmap_zero(cpuset);
++00404     for(i=0; i<NUMA_NUM_NODES; i++)
++00405       if (nodemask_isset(nodemask, i)) {
++00406         node = hwloc_get_obj_by_depth(topology, depth, i);
++00407         if (node)
++00408           hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
++00409       }
++00410   } else {
++00411     /* if no numa, libnuma assumes we have a single node */
++00412     if (nodemask_isset(nodemask, 0))
++00413       hwloc_bitmap_copy(cpuset, hwloc_topology_get_complete_cpuset(topology));
++00414     else
++00415       hwloc_bitmap_zero(cpuset);
++00416   }
++00417 
++00418   return 0;
++00419 }
++00420 
++00426 static inline int
++00427 hwloc_nodeset_from_linux_libnuma_nodemask(hwloc_topology_t topology, hwloc_nodeset_t nodeset,
++00428                                           const nodemask_t *nodemask)
++00429 {
++00430   int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
++00431 
++00432   if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
++00433     hwloc_obj_t node;
++00434     int i;
++00435     hwloc_bitmap_zero(nodeset);
++00436     for(i=0; i<NUMA_NUM_NODES; i++)
++00437       if (nodemask_isset(nodemask, i)) {
++00438         node = hwloc_get_obj_by_depth(topology, depth, i);
++00439         if (node)
++00440           hwloc_bitmap_set(nodeset, node->os_index);
++00441       }
++00442   } else {
++00443     /* if no numa, libnuma assumes we have a single node */
++00444     if (nodemask_isset(nodemask, 0))
++00445       hwloc_bitmap_fill(nodeset);
++00446     else
++00447       hwloc_bitmap_zero(nodeset);
++00448   }
++00449 
++00450   return 0;
++00451 }
++00452 
++00454 #endif /* NUMA_VERSION1_COMPATIBILITY */
++00455 
++00456 
++00457 #ifdef __cplusplus
++00458 } /* extern "C" */
++00459 #endif
++00460 
++00461 
++00462 #endif /* HWLOC_LINUX_NUMA_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00075.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00075.html +--- hwloc-1.1/doc/doxygen-doc/html/a00075.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00075.html 2010-12-31 23:48:22.433893614 +0100 +@@ -0,0 +1,43 @@ ++ ++ ++Hardware Locality (hwloc): linux.h Source File ++ ++ ++ ++ ++

linux.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2009 CNRS
++00003  * Copyright © 2009-2010 INRIA
++00004  * Copyright © 2009-2010 Université Bordeaux 1
++00005  * See COPYING in top-level directory.
++00006  */
++00007 
++00015 #ifndef HWLOC_LINUX_H
++00016 #define HWLOC_LINUX_H
++00017 
++00018 #include <hwloc.h>
++00019 #include <stdio.h>
++00020 
++00021 
++00022 #ifdef __cplusplus
++00023 extern "C" {
++00024 #endif
++00025 
++00026 
++00040  int hwloc_linux_parse_cpumap_file(FILE *file, hwloc_cpuset_t set);
++00041 
++00047  int hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set);
++00048 
++00054  int hwloc_linux_get_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set);
++00055 
++00059 #ifdef __cplusplus
++00060 } /* extern "C" */
++00061 #endif
++00062 
++00063 
++00064 #endif /* HWLOC_GLIBC_SCHED_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00076.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00076.html +--- hwloc-1.1/doc/doxygen-doc/html/a00076.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00076.html 2010-12-31 23:48:22.555908543 +0100 +@@ -0,0 +1,91 @@ ++ ++ ++Hardware Locality (hwloc): myriexpress.h Source File ++ ++ ++ ++ ++

myriexpress.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2010 INRIA
++00003  * See COPYING in top-level directory.
++00004  */
++00005 
++00014 #ifndef HWLOC_MYRIEXPRESS_H
++00015 #define HWLOC_MYRIEXPRESS_H
++00016 
++00017 #include <hwloc.h>
++00018 #include <hwloc/config.h>
++00019 #include <hwloc/linux.h>
++00020 
++00021 #include <myriexpress.h>
++00022 
++00023 
++00024 #ifdef __cplusplus
++00025 extern "C" {
++00026 #endif
++00027 
++00028 
++00039 static inline int
++00040 hwloc_mx_board_get_device_cpuset(hwloc_topology_t topology,
++00041                                  unsigned id, hwloc_cpuset_t set)
++00042 {
++00043   uint32_t in, out;
++00044 
++00045   in = id;
++00046   if (mx_get_info(NULL, MX_NUMA_NODE, &in, sizeof(in), &out, sizeof(out)) != MX_SUCCESS) {
++00047     errno = EINVAL;
++00048     return -1;
++00049   }
++00050 
++00051   if (out != (uint32_t) -1) {
++00052     hwloc_obj_t obj = NULL;
++00053     while ((obj = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, obj)) != NULL)
++00054       if (obj->os_index == out) {
++00055         hwloc_bitmap_copy(set, obj->cpuset);
++00056         goto out;
++00057       }
++00058   }
++00059   /* fallback to the full topology cpuset */
++00060   hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
++00061 
++00062  out:
++00063   return 0;
++00064 }
++00065 
++00072 static inline int
++00073 hwloc_mx_endpoint_get_device_cpuset(hwloc_topology_t topology,
++00074                                     mx_endpoint_t endpoint, hwloc_cpuset_t set)
++00075 {
++00076   uint64_t nid;
++00077   uint32_t nindex, eid;
++00078   mx_endpoint_addr_t eaddr;
++00079 
++00080   if (mx_get_endpoint_addr(endpoint, &eaddr) != MX_SUCCESS) {
++00081     errno = EINVAL;
++00082     return -1;
++00083   }
++00084 
++00085   if (mx_decompose_endpoint_addr(eaddr, &nid, &eid) != MX_SUCCESS) {
++00086     errno = EINVAL;
++00087     return -1;
++00088   }
++00089 
++00090   if (mx_nic_id_to_board_number(nid, &nindex) != MX_SUCCESS) {
++00091     errno = EINVAL;
++00092     return -1;
++00093   }
++00094 
++00095   return hwloc_mx_board_get_device_cpuset(topology, nindex, set);
++00096 }
++00097 
++00101 #ifdef __cplusplus
++00102 } /* extern "C" */
++00103 #endif
++00104 
++00105 
++00106 #endif /* HWLOC_MYRIEXPRESS_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/a00077.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00077.html +--- hwloc-1.1/doc/doxygen-doc/html/a00077.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/a00077.html 2010-12-31 23:48:22.456896427 +0100 +@@ -0,0 +1,68 @@ ++ ++ ++Hardware Locality (hwloc): openfabrics-verbs.h Source File ++ ++ ++ ++ ++

openfabrics-verbs.h

Go to the documentation of this file.
00001 /*
++00002  * Copyright © 2009 CNRS
++00003  * Copyright © 2009-2010 INRIA
++00004  * Copyright © 2009-2010 Université Bordeaux 1
++00005  * Copyright © 2009 Cisco Systems, Inc.  All rights reserved.
++00006  * See COPYING in top-level directory.
++00007  */
++00008 
++00019 #ifndef HWLOC_OPENFABRICS_VERBS_H
++00020 #define HWLOC_OPENFABRICS_VERBS_H
++00021 
++00022 #include <hwloc.h>
++00023 #include <hwloc/config.h>
++00024 #include <hwloc/linux.h>
++00025 
++00026 #include <infiniband/verbs.h>
++00027 
++00028 
++00029 #ifdef __cplusplus
++00030 extern "C" {
++00031 #endif
++00032 
++00033 
++00046 static inline int
++00047 hwloc_ibv_get_device_cpuset(hwloc_topology_t topology ,
++00048                             struct ibv_device *ibdev, hwloc_cpuset_t set)
++00049 {
++00050 #ifdef HWLOC_LINUX_SYS
++00051   /* If we're on Linux, use the verbs-provided sysfs mechanism to
++00052      get the local cpus */
++00053 #define HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX 128
++00054   char path[HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX];
++00055   FILE *sysfile = NULL;
++00056 
++00057   sprintf(path, "/sys/class/infiniband/%s/device/local_cpus",
++00058           ibv_get_device_name(ibdev));
++00059   sysfile = fopen(path, "r");
++00060   if (!sysfile)
++00061     return -1;
++00062 
++00063   hwloc_linux_parse_cpumap_file(sysfile, set);
++00064 
++00065   fclose(sysfile);
++00066 #else
++00067   /* Non-Linux systems simply get a full cpuset */
++00068   hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
++00069 #endif
++00070   return 0;
++00071 }
++00072 
++00076 #ifdef __cplusplus
++00077 } /* extern "C" */
++00078 #endif
++00079 
++00080 
++00081 #endif /* HWLOC_OPENFABRICS_VERBS_H */
++

Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/annotated.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/annotated.html +--- hwloc-1.1/doc/doxygen-doc/html/annotated.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/annotated.html 2010-12-31 23:48:22.458896673 +0100 +@@ -1,51 +1,25 @@ +- +- +- +- ++ ++ + Hardware Locality (hwloc): Data Structures +- +- +- +- +- +- +-
+-
+-

Data Structures

+-
+-
+-Here are the data structures with brief descriptions: +- +- ++ ++ ++ ++ ++

Hardware Locality (hwloc) Data Structures

Here are the data structures with brief descriptions:
hwloc_obj_attr_u::hwloc_cache_attr_sCache-specific Object Attributes
hwloc_obj_attr_u::hwloc_group_attr_sGroup-specific Object Attributes
+ + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ +
hwloc_objStructure of a topology object
hwloc_obj_attr_uObject type-specific Attributes
hwloc_obj_info_sObject info
hwloc_obj_memory_s::hwloc_obj_memory_page_type_sArray of local memory page types, NULL if no local memory and page_types is 0
hwloc_obj_memory_sObject memory
hwloc_topology_cpubind_supportFlags describing actual PU binding support for this topology
hwloc_topology_discovery_supportFlags describing actual discovery support for this topology
hwloc_topology_membind_supportFlags describing actual memory binding support for this topology
hwloc_topology_supportSet of flags describing actual support for this topology
hwloc_obj_attr_u::hwloc_cache_attr_sCache-specific Object Attributes
hwloc_obj_attr_u::hwloc_group_attr_sGroup-specific Object Attributes
hwloc_obj_info_sObject info
hwloc_obj_memory_sObject memory
hwloc_obj_memory_s::hwloc_obj_memory_page_type_sArray of local memory page types, NULL if no local memory and page_types is 0
hwloc_topology_cpubind_supportFlags describing actual PU binding support for this topology
hwloc_topology_discovery_supportFlags describing actual discovery support for this topology
hwloc_topology_membind_supportFlags describing actual memory binding support for this topology
hwloc_topology_supportSet of flags describing actual support for this topology
+-
+- + + +Binary files hwloc-1.1/doc/doxygen-doc/html/bc_s.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/bc_s.png differ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/classes.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/classes.html +--- hwloc-1.1/doc/doxygen-doc/html/classes.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/classes.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,42 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Alphabetical List +- +- +- +- +- +- +-
+-
+-

Data Structure Index

+-
+- +- +- +- +Binary files hwloc-1.1/doc/doxygen-doc/html/closed.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/closed.png differ +Binary files hwloc-1.1/doc/doxygen-doc/html/diagram.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/diagram.png differ +Binary files hwloc-1.1/doc/doxygen-doc/html/doxygen.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/doxygen.png differ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/files.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/files.html +--- hwloc-1.1/doc/doxygen-doc/html/files.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/files.html 2010-12-31 23:48:22.578911358 +0100 +@@ -1,49 +1,25 @@ +- +- +- +- ++ ++ + Hardware Locality (hwloc): File Index +- +- +- +- +- +- +-
+-
+-

File List

+-
+-
+-Here is a list of all files with brief descriptions: +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++

Hardware Locality (hwloc) File List

Here is a list of all files with brief descriptions:
bitmap.h [code]The bitmap API, for use in hwloc itself
cuda.h [code]Macros to help interaction between hwloc and the CUDA Driver API
cudart.h [code]Macros to help interaction between hwloc and the CUDA Runtime API
glibc-sched.h [code]Macros to help interaction between hwloc and glibc scheduling routines
helper.h [code]High-level hwloc traversal helpers
hwloc.h [code]The hwloc API
linux-libnuma.h [code]Macros to help interaction between hwloc and Linux libnuma
linux.h [code]Macros to help interaction between hwloc and Linux
myriexpress.h [code]Macros to help interaction between hwloc and Myrinet Express
openfabrics-verbs.h [code]Macros to help interaction between hwloc and OpenFabrics verbs
++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +
bitmap.h [code]The bitmap API, for use in hwloc itself
cuda.h [code]Macros to help interaction between hwloc and the CUDA Driver API
cudart.h [code]Macros to help interaction between hwloc and the CUDA Runtime API
glibc-sched.h [code]Macros to help interaction between hwloc and glibc scheduling routines
helper.h [code]High-level hwloc traversal helpers
hwloc.doxy
hwloc.h [code]The hwloc API
linux-libnuma.h [code]Macros to help interaction between hwloc and Linux libnuma
linux.h [code]Macros to help interaction between hwloc and Linux
myriexpress.h [code]Macros to help interaction between hwloc and Myrinet Express
openfabrics-verbs.h [code]Macros to help interaction between hwloc and OpenFabrics verbs
+-
+- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/functions.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/functions.html +--- hwloc-1.1/doc/doxygen-doc/html/functions.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/functions.html 2010-12-31 23:48:22.582911846 +0100 +@@ -1,328 +1,117 @@ +- +- +- +- ++ ++ + Hardware Locality (hwloc): Data Fields +- +- +- +- +- +- +-
+-Here is a list of all struct and union fields with links to the structures/unions they belong to: +- +-

- a -

++ ++ ++ ++ ++ ++
a | b | c | d | f | g | i | l | m | n | o | p | r | s | t | u | v
+ ++

+ +-

- b -

+- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/functions_vars.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/functions_vars.html +--- hwloc-1.1/doc/doxygen-doc/html/functions_vars.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/functions_vars.html 2010-12-31 23:48:22.459896795 +0100 +@@ -1,328 +1,117 @@ +- +- +- +- ++ ++ + Hardware Locality (hwloc): Data Fields - Variables +- +- +- +- +- +- +-
+-  +- +-

- a -

++ ++ ++ ++ ++ ++
a | b | c | d | f | g | i | l | m | n | o | p | r | s | t | u | v
+ ++

+ +-

- b -

+- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/globals_defs.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_defs.html +--- hwloc-1.1/doc/doxygen-doc/html/globals_defs.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_defs.html 2010-12-31 23:48:22.488900343 +0100 +@@ -0,0 +1,20 @@ ++ ++ ++Hardware Locality (hwloc): Globals - Defines ++ ++ ++ ++ ++ ++ ++

++

++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/globals_enum.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_enum.html +--- hwloc-1.1/doc/doxygen-doc/html/globals_enum.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_enum.html 2010-12-31 23:48:22.562909400 +0100 +@@ -0,0 +1,24 @@ ++ ++ ++Hardware Locality (hwloc): Globals - Enumerations ++ ++ ++ ++ ++ ++ ++

++

++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/globals_eval.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_eval.html +--- hwloc-1.1/doc/doxygen-doc/html/globals_eval.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_eval.html 2010-12-31 23:48:22.512903281 +0100 +@@ -0,0 +1,46 @@ ++ ++ ++Hardware Locality (hwloc): Globals - Enumeration values ++ ++ ++ ++ ++ ++ ++

++

++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/globals_func.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_func.html +--- hwloc-1.1/doc/doxygen-doc/html/globals_func.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_func.html 2010-12-31 23:48:22.556908665 +0100 +@@ -0,0 +1,183 @@ ++ ++ ++Hardware Locality (hwloc): Globals - Functions ++ ++ ++ ++ ++ ++ ++ ++

++ ++

++

- h -

    ++
  • hwloc_alloc() ++: hwloc.h
  • hwloc_alloc_membind() ++: hwloc.h
  • hwloc_alloc_membind_nodeset() ++: hwloc.h
  • hwloc_alloc_membind_policy() ++: helper.h
  • hwloc_alloc_membind_policy_nodeset() ++: helper.h
  • hwloc_bitmap_allbut() ++: bitmap.h
  • hwloc_bitmap_alloc() ++: bitmap.h
  • hwloc_bitmap_alloc_full() ++: bitmap.h
  • hwloc_bitmap_and() ++: bitmap.h
  • hwloc_bitmap_andnot() ++: bitmap.h
  • hwloc_bitmap_asprintf() ++: bitmap.h
  • hwloc_bitmap_clr() ++: bitmap.h
  • hwloc_bitmap_clr_range() ++: bitmap.h
  • hwloc_bitmap_compare() ++: bitmap.h
  • hwloc_bitmap_compare_first() ++: bitmap.h
  • hwloc_bitmap_copy() ++: bitmap.h
  • hwloc_bitmap_dup() ++: bitmap.h
  • hwloc_bitmap_fill() ++: bitmap.h
  • hwloc_bitmap_first() ++: bitmap.h
  • hwloc_bitmap_free() ++: bitmap.h
  • hwloc_bitmap_from_ith_ulong() ++: bitmap.h
  • hwloc_bitmap_from_ulong() ++: bitmap.h
  • hwloc_bitmap_intersects() ++: bitmap.h
  • hwloc_bitmap_isequal() ++: bitmap.h
  • hwloc_bitmap_isfull() ++: bitmap.h
  • hwloc_bitmap_isincluded() ++: bitmap.h
  • hwloc_bitmap_isset() ++: bitmap.h
  • hwloc_bitmap_iszero() ++: bitmap.h
  • hwloc_bitmap_last() ++: bitmap.h
  • hwloc_bitmap_next() ++: bitmap.h
  • hwloc_bitmap_not() ++: bitmap.h
  • hwloc_bitmap_only() ++: bitmap.h
  • hwloc_bitmap_or() ++: bitmap.h
  • hwloc_bitmap_set() ++: bitmap.h
  • hwloc_bitmap_set_ith_ulong() ++: bitmap.h
  • hwloc_bitmap_set_range() ++: bitmap.h
  • hwloc_bitmap_singlify() ++: bitmap.h
  • hwloc_bitmap_snprintf() ++: bitmap.h
  • hwloc_bitmap_sscanf() ++: bitmap.h
  • hwloc_bitmap_taskset_asprintf() ++: bitmap.h
  • hwloc_bitmap_taskset_snprintf() ++: bitmap.h
  • hwloc_bitmap_taskset_sscanf() ++: bitmap.h
  • hwloc_bitmap_to_ith_ulong() ++: bitmap.h
  • hwloc_bitmap_to_ulong() ++: bitmap.h
  • hwloc_bitmap_weight() ++: bitmap.h
  • hwloc_bitmap_xor() ++: bitmap.h
  • hwloc_bitmap_zero() ++: bitmap.h
  • hwloc_compare_types() ++: hwloc.h
  • hwloc_cpuset_from_glibc_sched_affinity() ++: glibc-sched.h
  • hwloc_cpuset_from_linux_libnuma_bitmask() ++: linux-libnuma.h
  • hwloc_cpuset_from_linux_libnuma_nodemask() ++: linux-libnuma.h
  • hwloc_cpuset_from_linux_libnuma_ulongs() ++: linux-libnuma.h
  • hwloc_cpuset_from_nodeset() ++: helper.h
  • hwloc_cpuset_from_nodeset_strict() ++: helper.h
  • hwloc_cpuset_to_glibc_sched_affinity() ++: glibc-sched.h
  • hwloc_cpuset_to_linux_libnuma_bitmask() ++: linux-libnuma.h
  • hwloc_cpuset_to_linux_libnuma_nodemask() ++: linux-libnuma.h
  • hwloc_cpuset_to_linux_libnuma_ulongs() ++: linux-libnuma.h
  • hwloc_cpuset_to_nodeset() ++: helper.h
  • hwloc_cpuset_to_nodeset_strict() ++: helper.h
  • hwloc_cuda_get_device_cpuset() ++: cuda.h
  • hwloc_cudart_get_device_cpuset() ++: cudart.h
  • hwloc_distribute() ++: helper.h
  • hwloc_distributev() ++: helper.h
  • hwloc_free() ++: hwloc.h
  • hwloc_get_ancestor_obj_by_depth() ++: helper.h
  • hwloc_get_ancestor_obj_by_type() ++: helper.h
  • hwloc_get_area_membind() ++: hwloc.h
  • hwloc_get_area_membind_nodeset() ++: hwloc.h
  • hwloc_get_cache_covering_cpuset() ++: helper.h
  • hwloc_get_child_covering_cpuset() ++: helper.h
  • hwloc_get_closest_objs() ++: helper.h
  • hwloc_get_common_ancestor_obj() ++: helper.h
  • hwloc_get_cpubind() ++: hwloc.h
  • hwloc_get_depth_type() ++: hwloc.h
  • hwloc_get_first_largest_obj_inside_cpuset() ++: helper.h
  • hwloc_get_largest_objs_inside_cpuset() ++: helper.h
  • hwloc_get_membind() ++: hwloc.h
  • hwloc_get_membind_nodeset() ++: hwloc.h
  • hwloc_get_nbobjs_by_depth() ++: hwloc.h
  • hwloc_get_nbobjs_by_type() ++: hwloc.h
  • hwloc_get_nbobjs_inside_cpuset_by_depth() ++: helper.h
  • hwloc_get_nbobjs_inside_cpuset_by_type() ++: helper.h
  • hwloc_get_next_child() ++: helper.h
  • hwloc_get_next_obj_by_depth() ++: helper.h
  • hwloc_get_next_obj_by_type() ++: helper.h
  • hwloc_get_next_obj_covering_cpuset_by_depth() ++: helper.h
  • hwloc_get_next_obj_covering_cpuset_by_type() ++: helper.h
  • hwloc_get_next_obj_inside_cpuset_by_depth() ++: helper.h
  • hwloc_get_next_obj_inside_cpuset_by_type() ++: helper.h
  • hwloc_get_obj_below_array_by_type() ++: helper.h
  • hwloc_get_obj_below_by_type() ++: helper.h
  • hwloc_get_obj_by_depth() ++: hwloc.h
  • hwloc_get_obj_by_type() ++: hwloc.h
  • hwloc_get_obj_covering_cpuset() ++: helper.h
  • hwloc_get_obj_inside_cpuset_by_depth() ++: helper.h
  • hwloc_get_obj_inside_cpuset_by_type() ++: helper.h
  • hwloc_get_proc_cpubind() ++: hwloc.h
  • hwloc_get_proc_membind() ++: hwloc.h
  • hwloc_get_proc_membind_nodeset() ++: hwloc.h
  • hwloc_get_pu_obj_by_os_index() ++: helper.h
  • hwloc_get_root_obj() ++: helper.h
  • hwloc_get_shared_cache_covering_obj() ++: helper.h
  • hwloc_get_thread_cpubind() ++: hwloc.h
  • hwloc_get_type_depth() ++: hwloc.h
  • hwloc_get_type_or_above_depth() ++: helper.h
  • hwloc_get_type_or_below_depth() ++: helper.h
  • hwloc_ibv_get_device_cpuset() ++: openfabrics-verbs.h
  • hwloc_linux_get_tid_cpubind() ++: linux.h
  • hwloc_linux_parse_cpumap_file() ++: linux.h
  • hwloc_linux_set_tid_cpubind() ++: linux.h
  • hwloc_mx_board_get_device_cpuset() ++: myriexpress.h
  • hwloc_mx_endpoint_get_device_cpuset() ++: myriexpress.h
  • hwloc_nodeset_from_linux_libnuma_bitmask() ++: linux-libnuma.h
  • hwloc_nodeset_from_linux_libnuma_nodemask() ++: linux-libnuma.h
  • hwloc_nodeset_from_linux_libnuma_ulongs() ++: linux-libnuma.h
  • hwloc_nodeset_to_linux_libnuma_bitmask() ++: linux-libnuma.h
  • hwloc_nodeset_to_linux_libnuma_nodemask() ++: linux-libnuma.h
  • hwloc_nodeset_to_linux_libnuma_ulongs() ++: linux-libnuma.h
  • hwloc_obj_attr_snprintf() ++: hwloc.h
  • hwloc_obj_cpuset_snprintf() ++: hwloc.h
  • hwloc_obj_get_info_by_name() ++: hwloc.h
  • hwloc_obj_is_in_subtree() ++: helper.h
  • hwloc_obj_snprintf() ++: hwloc.h
  • hwloc_obj_type_of_string() ++: hwloc.h
  • hwloc_obj_type_snprintf() ++: hwloc.h
  • hwloc_obj_type_string() ++: hwloc.h
  • hwloc_set_area_membind() ++: hwloc.h
  • hwloc_set_area_membind_nodeset() ++: hwloc.h
  • hwloc_set_cpubind() ++: hwloc.h
  • hwloc_set_membind() ++: hwloc.h
  • hwloc_set_membind_nodeset() ++: hwloc.h
  • hwloc_set_proc_cpubind() ++: hwloc.h
  • hwloc_set_proc_membind() ++: hwloc.h
  • hwloc_set_proc_membind_nodeset() ++: hwloc.h
  • hwloc_set_thread_cpubind() ++: hwloc.h
  • hwloc_topology_check() ++: hwloc.h
  • hwloc_topology_destroy() ++: hwloc.h
  • hwloc_topology_export_xml() ++: hwloc.h
  • hwloc_topology_export_xmlbuffer() ++: hwloc.h
  • hwloc_topology_get_allowed_cpuset() ++: helper.h
  • hwloc_topology_get_allowed_nodeset() ++: helper.h
  • hwloc_topology_get_complete_cpuset() ++: helper.h
  • hwloc_topology_get_complete_nodeset() ++: helper.h
  • hwloc_topology_get_depth() ++: hwloc.h
  • hwloc_topology_get_online_cpuset() ++: helper.h
  • hwloc_topology_get_support() ++: hwloc.h
  • hwloc_topology_get_topology_cpuset() ++: helper.h
  • hwloc_topology_get_topology_nodeset() ++: helper.h
  • hwloc_topology_ignore_all_keep_structure() ++: hwloc.h
  • hwloc_topology_ignore_type() ++: hwloc.h
  • hwloc_topology_ignore_type_keep_structure() ++: hwloc.h
  • hwloc_topology_init() ++: hwloc.h
  • hwloc_topology_insert_misc_object_by_cpuset() ++: hwloc.h
  • hwloc_topology_insert_misc_object_by_parent() ++: hwloc.h
  • hwloc_topology_is_thissystem() ++: hwloc.h
  • hwloc_topology_load() ++: hwloc.h
  • hwloc_topology_set_flags() ++: hwloc.h
  • hwloc_topology_set_fsroot() ++: hwloc.h
  • hwloc_topology_set_pid() ++: hwloc.h
  • hwloc_topology_set_synthetic() ++: hwloc.h
  • hwloc_topology_set_xml() ++: hwloc.h
  • hwloc_topology_set_xmlbuffer() ++: hwloc.h
++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/globals.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals.html +--- hwloc-1.1/doc/doxygen-doc/html/globals.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals.html 2010-12-31 23:48:22.577911235 +0100 +@@ -0,0 +1,230 @@ ++ ++ ++Hardware Locality (hwloc): Globals ++ ++ ++ ++ ++ ++ ++ ++

++ ++

++Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- h -

++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/globals_type.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_type.html +--- hwloc-1.1/doc/doxygen-doc/html/globals_type.html 1970-01-01 01:00:00.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/globals_type.html 2010-12-31 23:48:22.484899855 +0100 +@@ -0,0 +1,25 @@ ++ ++ ++Hardware Locality (hwloc): Globals - Typedefs ++ ++ ++ ++ ++ ++ ++

++

++
Generated on Tue Dec 21 21:04:54 2010 for Hardware Locality (hwloc) by  ++ ++doxygen 1.3.9.1
++ ++ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/index.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/index.html +--- hwloc-1.1/doc/doxygen-doc/html/index.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/index.html 2010-12-31 23:48:22.488900343 +0100 +@@ -1,39 +1,24 @@ +- +- +- +- ++ ++ + Hardware Locality (hwloc): Hardware Locality +- +- +- +- +- +- +-
+-
+-

Hardware Locality

+-
+-
+-

1.1

Portable abstraction of hierarchical architectures for high-performance computing

+-
+- ++ ++ ++ ++ ++

Hardware Locality

++

++

1.1rc6r2967

Portable abstraction of hierarchical architectures for high-performance computing

++

++


++

++ +

+-

+-Introduction

+-

hwloc provides command line tools and a C API to obtain the hierarchical map of key computing elements, such as: NUMA memory nodes, shared caches, processor sockets, processor cores, and processing units (logical processors or "threads"). hwloc also gathers various attributes such as cache and memory information, and is portable across a variety of different operating systems and platforms.

+-

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.

+-

Note that the hwloc project represents the merger of the libtopology project from INRIA and the Portable Linux Processor Affinity (PLPA) sub-project from Open MPI. Both of these prior projects are now deprecated. The first hwloc release is essentially a "re-branding" of the libtopology code base, but with both a few genuinely new features and a few PLPA-like features added in. More new features and more PLPA-like features will be added to hwloc over time. See Switching from PLPA to hwloc for more details about converting your application from PLPA to hwloc.

+-

hwloc supports the following operating systems:

++

++Introduction

++hwloc provides command line tools and a C API to obtain the hierarchical map of key computing elements, such as: NUMA memory nodes, shared caches, processor sockets, processor cores, and processing units (logical processors or "threads"). hwloc also gathers various attributes such as cache and memory information, and is portable across a variety of different operating systems and platforms.

++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.

++Note that the hwloc project represents the merger of the libtopology project from INRIA and the Portable Linux Processor Affinity (PLPA) sub-project from Open MPI. Both of these prior projects are now deprecated. The first hwloc release is essentially a "re-branding" of the libtopology code base, but with both a few genuinely new features and a few PLPA-like features added in. More new features and more PLPA-like features will be added to hwloc over time. See switchfromplpa for more details about converting your application from PLPA to hwloc.

++hwloc supports the following operating systems:

+

    +
  • + Linux (including old kernels not having sysfs topology information, with knowledge of cpusets, offline cpus, ScaleMP vSMP, and Kerrighed support)
  • +@@ -52,40 +37,45 @@ +
  • + Microsoft Windows
  • +
+-

hwloc only reports the number of processors on unsupported operating systems; no topology information is available.

+-

For development and debugging purposes, hwloc also offers the ability to work on "fake" topologies:

++

++hwloc only reports the number of processors on unsupported operating systems; no topology information is available.

++For development and debugging purposes, hwloc also offers the ability to work on "fake" topologies:

+

    +
  • + Symmetrical tree of resources generated from a list of level arities
  • +
  • + Remote machine simulation through the gathering of Linux sysfs topology files
  • +
+-

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, PDF, PNG, and FIG (see CLI Examples below). Note that some of the export formats require additional support libraries.

+-

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 Programming Interface 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.

+- ++

++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, PDF, PNG, and FIG (see CLI Examples below). Note that some of the export formats require additional support libraries.

++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 Programming Interface 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.

++ +

+-

+-Installation

+-

hwloc (http://www.open-mpi.org/projects/hwloc/) is available under the BSD license. It is hosted as a sub-project of the overall Open MPI project (http://www.open-mpi.org/). Note that hwloc does not require any functionality from Open MPI -- it is a wholly separate (and much smaller!) project and code base. It just happens to be hosted as part of the overall Open MPI project.

+-

Nightly development snapshots are available on the web site. Additionally, the code can be directly checked out of Subversion:

++

++Installation

++hwloc (http://www.open-mpi.org/projects/hwloc/) is available under the BSD license. It is hosted as a sub-project of the overall Open MPI project (http://www.open-mpi.org/). Note that hwloc does not require any functionality from Open MPI -- it is a wholly separate (and much smaller!) project and code base. It just happens to be hosted as part of the overall Open MPI project.

++Nightly development snapshots are available on the web site. Additionally, the code can be directly checked out of Subversion:

+

shell$ svn checkout http://svn.open-mpi.org/svn/hwloc/trunk hwloc-trunk
+ shell$ cd hwloc-trunk
+ shell$ ./autogen.sh
+-

Note that GNU Autoconf >=2.63, Automake >=1.10 and Libtool >=2.2.6 are required when building from a Subversion checkout.

+-

Installation by itself is the fairly common GNU-based process:

++

++Note that GNU Autoconf >=2.63, Automake >=1.10 and Libtool >=2.2.6 are required when building from a Subversion checkout.

++Installation by itself is the fairly common GNU-based process:

+

shell$ ./configure --prefix=...
+ shell$ make
+ shell$ make install
+-

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 can be found when hwloc is configured and build. Similarly, lstopo's XML support requires the libxml2 development package.

+- ++

++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 can be found when hwloc is configured and build. Similarly, lstopo's XML support requires the libxml2 development package.

++ +

+-

+-CLI Examples

+-

On a 4-socket 2-core machine with hyperthreading, the lstopo tool may show the following graphical output:

++

++CLI Examples

++On a 4-socket 2-core machine with hyperthreading, the lstopo tool may show the following graphical output:

+

+-dudley.png ++dudley.png +
+-

Here's the equivalent output in textual form:

++

++Here's the equivalent output in textual form:

+

+ Machine (16GB)
+   Socket L#0 + L3 L#0 (4096KB)
+@@ -116,7 +106,8 @@
+     L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
+       PU L#14 (P#7)
+       PU L#15 (P#15)
+-

Finally, here's the equivalent output in XML. Long lines were artificially broken for document clarity (in the real output, each XML tag is on a single line), and only socket #0 is shown for brevity:

++

++Finally, here's the equivalent output in XML. Long lines were artificially broken for document clarity (in the real output, each XML tag is on a single line), and only socket #0 is shown for brevity:

+

+ <?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE topology SYSTEM "hwloc.dtd">
+@@ -180,11 +171,13 @@
+     <!-- ...other sockets listed here ... -->
+   </object>
+ </topology>
+-

On a 4-socket 2-core Opteron NUMA machine, the lstopo tool may show the following graphical output:

++

++On a 4-socket 2-core Opteron NUMA machine, the lstopo tool may show the following graphical output:

+

+-hagrid.png ++hagrid.png +
+-

Here's the equivalent output in textual form:

++

++Here's the equivalent output in textual form:

+

+ Machine (32GB)
+   NUMANode L#0 (P#0 8190MB) + Socket L#0
+@@ -199,7 +192,8 @@
+   NUMANode L#3 (P#3 8192MB) + Socket L#3
+     L2 L#6 (1024KB) + L1 L#6 (64KB) + Core L#6 + PU L#6 (P#6)
+     L2 L#7 (1024KB) + L1 L#7 (64KB) + Core L#7 + PU L#7 (P#7)
+-

And here's the equivalent output in XML. Similar to above, line breaks were added and only PU #0 is shown for brevity:

++

++And here's the equivalent output in XML. Similar to above, line breaks were added and only PU #0 is shown for brevity:

+

+ <?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE topology SYSTEM "hwloc.dtd">
+@@ -246,11 +240,13 @@
+         </object>
+   <!-- ...more objects listed here ... -->
+ </topology>
+-

On a 2-socket quad-core Xeon (pre-Nehalem, with 2 dual-core dies into each socket):

++

++On a 2-socket quad-core Xeon (pre-Nehalem, with 2 dual-core dies into each socket):

+

+-emmett.png ++emmett.png +
+-

Here's the same output in textual form:

++

++Here's the same output in textual form:

+

+ Machine (16GB)
+   Socket L#0
+@@ -267,7 +263,8 @@
+     L2 L#3 (4096KB)
+       L1 L#6 (32KB) + Core L#6 + PU L#6 (P#3)
+       L1 L#7 (32KB) + Core L#7 + PU L#7 (P#7)
+-

And the same output in XML (line breaks added, only PU #0 shown):

++

++And the same output in XML (line breaks added, only PU #0 shown):

+

+ <?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE topology SYSTEM "hwloc.dtd">
+@@ -312,39 +309,41 @@
+       </object>
+   <!-- ...more objects listed here ... -->
+ </topology>
+-
++

++ +

+-

+-Programming Interface

+-

The basic interface is available in hwloc.h. It essentially offers low-level routines for advanced programmers that want to manually manipulate objects and follow links between them. Documentation for everything in hwloc.h are provided later in this document. Developers should also look at hwloc/helper.h (and also in this document, which provides good higher-level topology traversal examples.

+-

To precisely define the vocabulary used by hwloc, a Terms and Definitions section is available and should probably be read first.

+-

Each hwloc object contains a cpuset describing the list of processing units that it contains. These bitmaps may be used for CPU binding and Memory binding. hwloc offers an extensive bitmap manipulation interface in hwloc/bitmap.h.

+-

Moreover, hwloc also comes with additional helpers for interoperability with several commonly used environments. See the Interoperability with other software section for details.

+-

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/.

+-

NOTE: If you are building the documentation from a Subversion checkout, you will need to have Doxygen and pdflatex installed -- 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).

+-

+-Portability

+-

As shown in CLI Examples, 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 32 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, sockets, or cores is available.

+-

Similarly, 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. CPU binding and Memory binding provide more information on which hwloc binding functions should be preferred because interfaces for them are usually available on the supported Operating Systems.

+-

Here's the graphical output from lstopo on this platform when Simultaneous Multi-Threading (SMT) is enabled:

++

++Programming Interface

++The basic interface is available in hwloc.h. It essentially offers low-level routines for advanced programmers that want to manually manipulate objects and follow links between them. Documentation for everything in hwloc.h are provided later in this document. Developers should also look at hwloc/helper.h (and also in this document, which provides good higher-level topology traversal examples.

++To precisely define the vocabulary used by hwloc, a termsanddefs section is available and should probably be read first.

++Each hwloc object contains a cpuset describing the list of processing units that it contains. These bitmaps may be used for CPU binding and Memory binding. hwloc offers an extensive bitmap manipulation interface in hwloc/bitmap.h.

++Moreover, hwloc also comes with additional helpers for interoperability with several commonly used environments. See the interoperability section for details.

++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/.

++NOTE: If you are building the documentation from a Subversion checkout, you will need to have Doxygen and pdflatex installed -- 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).

++Portability

++As shown in CLI Examples, 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 32 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, sockets, or cores is available.

++Similarly, 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. CPU binding and Memory binding provide more information on which hwloc binding functions should be preferred because interfaces for them are usually available on the supported Operating Systems.

++Here's the graphical output from lstopo on this platform when Simultaneous Multi-Threading (SMT) is enabled:

+

+-ppc64-with-smt.png ++ppc64-with-smt.png +
+-

And here's the graphical output from lstopo on this platform when SMT is disabled:

++

++And here's the graphical output from lstopo on this platform when SMT is disabled:

+

+-ppc64-without-smt.png ++ppc64-without-smt.png +
+-

Notice that hwloc only sees half the PUs when SMT is disabled. PU #15, for example, seems to change location from NUMA node #0 to #1. In reality, no PUs "moved" -- they were simply re-numbered when hwloc only saw half as many. Hence, PU #15 in the SMT-disabled picture probably corresponds to PU #30 in the SMT-enabled picture.

+-

This same "PUs have disappeared" effect can be seen on other platforms -- 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.

+-

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:

++

++Notice that hwloc only sees half the PUs when SMT is disabled. PU #15, for example, seems to change location from NUMA node #0 to #1. In reality, no PUs "moved" -- they were simply re-numbered when hwloc only saw half as many. Hence, PU #15 in the SMT-disabled picture probably corresponds to PU #30 in the SMT-enabled picture.

++This same "PUs have disappeared" effect can be seen on other platforms -- 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.

++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:

+

+-ppc64-full-with-smt.png ++ppc64-full-with-smt.png +
+-

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.

+-

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, there may someday be an element "lower" than a PU, or perhaps a new element may exist between a core and a PU.

+-

+-API Example

+-

The following small C example (named ``hwloc-hello.c'') prints the topology of the machine and bring the process to the first logical processor of the second core of the machine.

++

++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.

++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, there may someday be an element "lower" than a PU, or perhaps a new element may exist between a core and a PU.

++API Example

++The following small C example (named ``hwloc-hello.c'') prints the topology of the machine and bring the process to the first logical processor of the second core of the machine.

+

/* Example hwloc API program.
+  *
+  * Copyright © 2009-2010 INRIA
+@@ -354,21 +353,21 @@
+  * hwloc-hello.c
+  */
+ 
+-#include <hwloc.h>
++#include <hwloc.h>
+ #include <errno.h>
+ #include <stdio.h>
+ #include <string.h>
+ 
+-static void print_children(hwloc_topology_t topology, hwloc_obj_t obj, 
++static void print_children(hwloc_topology_t topology, hwloc_obj_t obj, 
+                            int depth)
+ {
+-    char string[128];
++    char string[128];
+     unsigned i;
+ 
+-    hwloc_obj_snprintf(string, sizeof(string), topology, obj, "#", 0);
+-    printf("%*s%s\n", 2*depth, "", string);
+-    for (i = 0; i < obj->arity; i++) {
+-        print_children(topology, obj->children[i], depth + 1);
++    hwloc_obj_snprintf(string, sizeof(string), topology, obj, "#", 0);
++    printf("%*s%s\n", 2*depth, "", string);
++    for (i = 0; i < obj->arity; i++) {
++        print_children(topology, obj->children[i], depth + 1);
+     }
+ }
+ 
+@@ -378,14 +377,14 @@
+     unsigned i, n;
+     unsigned long size;
+     int levels;
+-    char string[128];
++    char string[128];
+     int topodepth;
+-    hwloc_topology_t topology;
+-    hwloc_cpuset_t cpuset;
+-    hwloc_obj_t obj;
++    hwloc_topology_t topology;
++    hwloc_cpuset_t cpuset;
++    hwloc_obj_t obj;
+ 
+     /* Allocate and initialize topology object. */
+-    hwloc_topology_init(&topology);
++    hwloc_topology_init(&topology);
+ 
+     /* ... Optionally, put detection configuration here to ignore
+        some objects types, define a synthetic topology, etc....  
+@@ -395,11 +394,11 @@
+        Detection. */
+ 
+     /* Perform the topology detection. */
+-    hwloc_topology_load(topology);
++    hwloc_topology_load(topology);
+ 
+     /* Optionally, get some additional topology information
+        in case we need the topology depth later. */
+-    topodepth = hwloc_topology_get_depth(topology);
++    topodepth = hwloc_topology_get_depth(topology);
+ 
+     /*****************************************************************
+      * First example:
+@@ -407,13 +406,13 @@
+      * the system level) to the lowest level (always the proc level).
+      *****************************************************************/
+     for (depth = 0; depth < topodepth; depth++) {
+-        printf("*** Objects at level %d\n", depth);
+-        for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth); 
++        printf("*** Objects at level %d\n", depth);
++        for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth); 
+              i++) {
+-            hwloc_obj_snprintf(string, sizeof(string), topology,
+-                       hwloc_get_obj_by_depth(topology, depth, i),
+-                       "#", 0);
+-            printf("Index %u: %s\n", i, string);
++            hwloc_obj_snprintf(string, sizeof(string), topology,
++                       hwloc_get_obj_by_depth(topology, depth, i),
++                       "#", 0);
++            printf("Index %u: %s\n", i, string);
+         }
+     }
+ 
+@@ -421,19 +420,19 @@
+      * Second example:
+      * Walk the topology with a tree style.
+      *****************************************************************/
+-    printf("*** Printing overall tree\n");
+-    print_children(topology, hwloc_get_root_obj(topology), 0);
++    printf("*** Printing overall tree\n");
++    print_children(topology, hwloc_get_root_obj(topology), 0);
+ 
+     /*****************************************************************
+      * Third example:
+      * Print the number of sockets.
+      *****************************************************************/
+-    depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
+-    if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+-        printf("*** The number of sockets is unknown\n");
++    depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
++    if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
++        printf("*** The number of sockets is unknown\n");
+     } else {
+-        printf("*** %u socket(s)\n", 
+-               hwloc_get_nbobjs_by_depth(topology, depth));
++        printf("*** %u socket(s)\n", 
++               hwloc_get_nbobjs_by_depth(topology, depth));
+     }
+ 
+     /*****************************************************************
+@@ -443,14 +442,14 @@
+      *****************************************************************/
+     levels = 0;
+     size = 0;
+-    for (obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, 0);
++    for (obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, 0);
+          obj;
+-         obj = obj->parent)
+-      if (obj->type == HWLOC_OBJ_CACHE) {
++         obj = obj->parent)
++      if (obj->type == HWLOC_OBJ_CACHE) {
+         levels++;
+-        size += obj->attr->cache.size;
++        size += obj->attr->cache.size;
+       }
+-    printf("*** Logical processor 0 has %d caches totaling %luKB\n", 
++    printf("*** Logical processor 0 has %d caches totaling %luKB\n", 
+            levels, size / 1024);
+ 
+     /*****************************************************************
+@@ -458,32 +457,32 @@
+      * Bind to only one thread of the last core of the machine.
+      *
+      * First find out where cores are, or else smaller sets of CPUs if
+-     * the OS doesn't have the notion of a "core".
++     * the OS doesn't have the notion of a "core".
+      *****************************************************************/
+-    depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
++    depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
+ 
+     /* Get last core. */
+-    obj = hwloc_get_obj_by_depth(topology, depth,
+-                   hwloc_get_nbobjs_by_depth(topology, depth) - 1);
++    obj = hwloc_get_obj_by_depth(topology, depth,
++                   hwloc_get_nbobjs_by_depth(topology, depth) - 1);
+     if (obj) {
+         /* Get a copy of its cpuset that we may modify. */
+-        cpuset = hwloc_bitmap_dup(obj->cpuset);
++        cpuset = hwloc_bitmap_dup(obj->cpuset);
+ 
+         /* Get only one logical processor (in case the core is
+            SMT/hyperthreaded). */
+-        hwloc_bitmap_singlify(cpuset);
++        hwloc_bitmap_singlify(cpuset);
+ 
+         /* And try to bind ourself there. */
+-        if (hwloc_set_cpubind(topology, cpuset, 0)) {
++        if (hwloc_set_cpubind(topology, cpuset, 0)) {
+             char *str;
+             int error = errno;
+-            hwloc_bitmap_asprintf(&str, obj->cpuset);
+-            printf("Couldn't bind to cpuset %s: %s\n", str, strerror(error));
++            hwloc_bitmap_asprintf(&str, obj->cpuset);
++            printf("Couldn't bind to cpuset %s: %s\n", str, strerror(error));
+             free(str);
+         }
+ 
+         /* Free our cpuset copy */
+-        hwloc_bitmap_free(cpuset);
++        hwloc_bitmap_free(cpuset);
+     }
+ 
+     /*****************************************************************
+@@ -492,33 +491,35 @@
+      * memory to the last NUMA node.
+      *****************************************************************/
+     /* Get last node. */
+-    n = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NODE);
++    n = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NODE);
+     if (n) {
+         void *m;
+-        size_t size = 1024*1024;
++        size_t size = 1024*1024;
+ 
+-        obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, n - 1);
+-        m = hwloc_alloc_membind_nodeset(topology, size, obj->nodeset,
+-                HWLOC_MEMBIND_DEFAULT, 0);
+-        hwloc_free(topology, m, size);
++        obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, n - 1);
++        m = hwloc_alloc_membind_nodeset(topology, size, obj->nodeset,
++                HWLOC_MEMBIND_DEFAULT, 0);
++        hwloc_free(topology, m, size);
+ 
+         m = malloc(size);
+-        hwloc_set_area_membind_nodeset(topology, m, size, obj->nodeset,
+-                HWLOC_MEMBIND_DEFAULT, 0);
++        hwloc_set_area_membind_nodeset(topology, m, size, obj->nodeset,
++                HWLOC_MEMBIND_DEFAULT, 0);
+         free(m);
+     }
+ 
+     /* Destroy topology object. */
+-    hwloc_topology_destroy(topology);
++    hwloc_topology_destroy(topology);
+ 
+     return 0;
+ }
+-

hwloc provides a pkg-config 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):

++

++hwloc provides a pkg-config 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):

+

+ CFLAGS += $(pkg-config --cflags hwloc)
+ LDLIBS += $(pkg-config --libs hwloc)
+ cc hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
+-

On a machine with 4GB of RAM and 2 processor sockets -- each socket of which has two processing cores -- the output from running hwloc-hello could be something like the following:

++

++On a machine with 4GB of RAM and 2 processor sockets -- each socket of which has two processing cores -- the output from running hwloc-hello could be something like the following:

+

+ shell$ ./hwloc-hello
+ *** Objects at level 0
+@@ -550,50 +551,278 @@
+       PU#3
+ *** 2 socket(s)
+ shell$ 
+-
++

++ +

+-

+-Questions and Bugs

+-

Questions should be sent to the devel mailing list (http://www.open-mpi.org/community/lists/hwloc.php). Bug reports should be reported in the tracker (https://svn.open-mpi.org/trac/hwloc/).

+-

If hwloc discovers an incorrect topology for your machine, the very first thing you should check is to ensure that you have the most recent updates installed for your operating system. Indeed, most of hwloc topology discovery relies on hardware information retrieved through the operation system (e.g., via the /sys virtual filesystem of the Linux kernel). If upgrading your OS or Linux kernel does not solve your problem, you may also want to ensure that you are running the most recent version of the BIOS for your machine.

+-

If those things fail, contact us on the mailing list for additional help. Please attach the output of lstopo after having given the --enable-debug option to ./configure and rebuilt completely, to get debugging output.

+- ++

++Questions and Bugs

++Questions should be sent to the devel mailing list (http://www.open-mpi.org/community/lists/hwloc.php). Bug reports should be reported in the tracker (https://svn.open-mpi.org/trac/hwloc/).

++If hwloc discovers an incorrect topology for your machine, the very first thing you should check is to ensure that you have the most recent updates installed for your operating system. Indeed, most of hwloc topology discovery relies on hardware information retrieved through the operation system (e.g., via the /sys virtual filesystem of the Linux kernel). If upgrading your OS or Linux kernel does not solve your problem, you may also want to ensure that you are running the most recent version of the BIOS for your machine.

++If those things fail, contact us on the mailing list for additional help. Please attach the output of lstopo after having given the --enable-debug option to ./configure and rebuilt completely, to get debugging output.

++ +

+-

+-History / Credits

+-

hwloc is the evolution and merger of the libtopology (http://runtime.bordeaux.inria.fr/libtopology/) project and the Portable Linux Processor Affinity (PLPA) (http://www.open-mpi.org/projects/plpa/) 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.

+-

libtopology was initially developed by the INRIA Runtime Team-Project (http://runtime.bordeaux.inria.fr/) (headed by Raymond Namyst (http://dept-info.labri.fr/~namyst/). 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.

+- ++

++History / Credits

++hwloc is the evolution and merger of the libtopology (http://runtime.bordeaux.inria.fr/libtopology/) project and the Portable Linux Processor Affinity (PLPA) (http://www.open-mpi.org/projects/plpa/) 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.

++libtopology was initially developed by the INRIA Runtime Team-Project (http://runtime.bordeaux.inria.fr/) (headed by Raymond Namyst (http://dept-info.labri.fr/~namyst/). 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.

++ +

+-

+-Further Reading

+-

The documentation chapters include

++

++Further Reading

++The documentation chapters include

+

+-

Make sure to have had a look at those too!

+- ++

++Make sure to have had a look at those too!

++ +

+-
+- + + +diff -uNr hwloc-1.1/doc/doxygen-doc/html/modules.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/modules.html +--- hwloc-1.1/doc/doxygen-doc/html/modules.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/modules.html 2010-12-31 23:48:22.511903158 +0100 +@@ -1,68 +1,48 @@ +- +- +- +- ++ ++ + Hardware Locality (hwloc): Module Index +- +- +- +- +- +- +-
+-
+-

Modules

+-
+-
+-Here is a list of all modules:
+- + + +Binary files hwloc-1.1/doc/doxygen-doc/html/nav_f.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/nav_f.png differ +Binary files hwloc-1.1/doc/doxygen-doc/html/nav_h.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/nav_h.png differ +Binary files hwloc-1.1/doc/doxygen-doc/html/open.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/open.png differ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/pages.html hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/pages.html +--- hwloc-1.1/doc/doxygen-doc/html/pages.html 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/pages.html 1970-01-01 01:00:00.000000000 +0100 +@@ -1,52 +0,0 @@ +- +- +- +- +-Hardware Locality (hwloc): Page Index +- +- +- +- +- +- +-
+-
+-

Related Pages

+-
+- +- +- +- +Binary files hwloc-1.1/doc/doxygen-doc/html/tab_a.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/tab_a.png differ +Binary files hwloc-1.1/doc/doxygen-doc/html/tab_b.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/tab_b.png differ +Binary files hwloc-1.1/doc/doxygen-doc/html/tab_h.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/tab_h.png differ +diff -uNr hwloc-1.1/doc/doxygen-doc/html/tabs.css hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/tabs.css +--- hwloc-1.1/doc/doxygen-doc/html/tabs.css 2010-12-16 22:48:29.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/tabs.css 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +-.tabs, .tabs2, .tabs3 { +- background-image: url('tab_b.png'); +- width: 100%; +- z-index: 101; +- font-size: 13px; +-} +- +-.tabs2 { +- font-size: 10px; +-} +-.tabs3 { +- font-size: 9px; +-} +- +-.tablist { +- margin: 0; +- padding: 0; +- display: table; +-} +- +-.tablist li { +- float: left; +- display: table-cell; +- background-image: url('tab_b.png'); +- line-height: 36px; +- list-style: none; +-} +- +-.tablist a { +- display: block; +- padding: 0 20px; +- font-weight: bold; +- background-image:url('tab_s.png'); +- background-repeat:no-repeat; +- background-position:right; +- color: #283A5D; +- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +- text-decoration: none; +- outline: none; +-} +- +-.tabs3 .tablist a { +- padding: 0 10px; +-} +- +-.tablist a:hover { +- background-image: url('tab_h.png'); +- background-repeat:repeat-x; +- color: #fff; +- text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +- text-decoration: none; +-} +- +-.tablist li.current a { +- background-image: url('tab_a.png'); +- background-repeat:repeat-x; +- color: #fff; +- text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +-} +Binary files hwloc-1.1/doc/doxygen-doc/html/tab_s.png and hwloc-1.1rc6r2967_final/doc/doxygen-doc/html/tab_s.png differ +diff -uNr hwloc-1.1/doc/doxygen-doc/hwloc-a4.pdf hwloc-1.1rc6r2967_final/doc/doxygen-doc/hwloc-a4.pdf +--- hwloc-1.1/doc/doxygen-doc/hwloc-a4.pdf 2010-12-16 22:48:38.000000000 +0100 ++++ hwloc-1.1rc6r2967_final/doc/doxygen-doc/hwloc-a4.pdf 2010-12-31 23:48:22.394888840 +0100 +@@ -3,26647 +3,27932 @@ + << /S /GoTo /D (chapter.1) >> + endobj + 8 0 obj +-(\376\377\000H\000a\000r\000d\000w\000a\000r\000e\000\040\000L\000o\000c\000a\000l\000i\000t\000y) ++(Hardware Locality ) + endobj + 9 0 obj + << /S /GoTo /D (section.1.1) >> + endobj + 12 0 obj +-(\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n) ++(Introduction) + endobj + 13 0 obj + << /S /GoTo /D (section.1.2) >> + endobj + 16 0 obj +-(\376\377\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) ++(Installation) + endobj + 17 0 obj + << /S /GoTo /D (section.1.3) >> + endobj + 20 0 obj +-(\376\377\000C\000L\000I\000\040\000E\000x\000a\000m\000p\000l\000e\000s) ++(CLI Examples) + endobj + 21 0 obj + << /S /GoTo /D (section.1.4) >> + endobj + 24 0 obj +-(\376\377\000P\000r\000o\000g\000r\000a\000m\000m\000i\000n\000g\000\040\000I\000n\000t\000e\000r\000f\000a\000c\000e) ++(Programming Interface) + endobj + 25 0 obj +-<< /S /GoTo /D (subsection.1.4.1) >> ++<< /S /GoTo /D (section.1.5) >> + endobj + 28 0 obj +-(\376\377\000P\000o\000r\000t\000a\000b\000i\000l\000i\000t\000y) ++(Questions and Bugs) + endobj + 29 0 obj +-<< /S /GoTo /D (subsection.1.4.2) >> ++<< /S /GoTo /D (section.1.6) >> + endobj + 32 0 obj +-(\376\377\000A\000P\000I\000\040\000E\000x\000a\000m\000p\000l\000e) ++(History / Credits) + endobj + 33 0 obj +-<< /S /GoTo /D (section.1.5) >> ++<< /S /GoTo /D (section.1.7) >> + endobj + 36 0 obj +-(\376\377\000Q\000u\000e\000s\000t\000i\000o\000n\000s\000\040\000a\000n\000d\000\040\000B\000u\000g\000s) ++(Further Reading) + endobj + 37 0 obj +-<< /S /GoTo /D (section.1.6) >> ++<< /S /GoTo /D (section.1.8) >> + endobj + 40 0 obj +-(\376\377\000H\000i\000s\000t\000o\000r\000y\000\040\000/\000\040\000C\000r\000e\000d\000i\000t\000s) ++(lstopo) + endobj + 41 0 obj +-<< /S /GoTo /D (section.1.7) >> ++<< /S /GoTo /D (section.1.9) >> + endobj + 44 0 obj +-(\376\377\000F\000u\000r\000t\000h\000e\000r\000\040\000R\000e\000a\000d\000i\000n\000g) ++(hwloc-bind) + endobj + 45 0 obj +-<< /S /GoTo /D (chapter.2) >> ++<< /S /GoTo /D (section.1.10) >> + endobj + 48 0 obj +-(\376\377\000T\000e\000r\000m\000s\000\040\000a\000n\000d\000\040\000D\000e\000f\000i\000n\000i\000t\000i\000o\000n\000s) ++(hwloc-calc) + endobj + 49 0 obj +-<< /S /GoTo /D (chapter.3) >> ++<< /S /GoTo /D (section.1.11) >> + endobj + 52 0 obj +-(\376\377\000C\000o\000m\000m\000a\000n\000d\000-\000l\000i\000n\000e\000\040\000t\000o\000o\000l\000s) ++(hwloc-distrib) + endobj + 53 0 obj +-<< /S /GoTo /D (section.3.1) >> ++<< /S /GoTo /D (section.1.12) >> + endobj + 56 0 obj +-(\376\377\000l\000s\000t\000o\000p\000o) ++(hwloc-ps) + endobj + 57 0 obj +-<< /S /GoTo /D (section.3.2) >> ++<< /S /GoTo /D (section.1.13) >> + endobj + 60 0 obj +-(\376\377\000h\000w\000l\000o\000c\000-\000b\000i\000n\000d) ++(Using hwloc's M4 Embedding Capabilities) + endobj + 61 0 obj +-<< /S /GoTo /D (section.3.3) >> ++<< /S /GoTo /D (section.1.14) >> + endobj + 64 0 obj +-(\376\377\000h\000w\000l\000o\000c\000-\000c\000a\000l\000c) ++(Example Embedding hwloc) + endobj + 65 0 obj +-<< /S /GoTo /D (section.3.4) >> ++<< /S /GoTo /D (section.1.15) >> + endobj + 68 0 obj +-(\376\377\000h\000w\000l\000o\000c\000-\000d\000i\000s\000t\000r\000i\000b) ++(Topology Context vs. Caching) + endobj + 69 0 obj +-<< /S /GoTo /D (section.3.5) >> ++<< /S /GoTo /D (section.1.16) >> + endobj + 72 0 obj +-(\376\377\000h\000w\000l\000o\000c\000-\000p\000s) ++(Hierarchy vs. Core@Socket) + endobj + 73 0 obj +-<< /S /GoTo /D (chapter.4) >> ++<< /S /GoTo /D (section.1.17) >> + endobj + 76 0 obj +-(\376\377\000E\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000v\000a\000r\000i\000a\000b\000l\000e\000s) ++(Logical vs. Physical/OS Indexes) + endobj + 77 0 obj +-<< /S /GoTo /D (chapter.5) >> ++<< /S /GoTo /D (section.1.18) >> + endobj + 80 0 obj +-(\376\377\000C\000P\000U\000\040\000B\000i\000n\000d\000i\000n\000g\000\040\000a\000n\000d\000\040\000M\000e\000m\000o\000r\000y\000\040\000B\000i\000n\000d\000i\000n\000g) ++(Counting Specification) + endobj + 81 0 obj +-<< /S /GoTo /D (chapter.6) >> ++<< /S /GoTo /D (section.1.19) >> + endobj + 84 0 obj +-(\376\377\000I\000n\000t\000e\000r\000o\000p\000e\000r\000a\000b\000i\000l\000i\000t\000y\000\040\000w\000i\000t\000h\000\040\000o\000t\000h\000e\000r\000\040\000s\000o\000f\000t\000w\000a\000r\000e) ++(I do not want hwloc to rediscover my enormous machine topology everytime I rerun a process) + endobj + 85 0 obj +-<< /S /GoTo /D (chapter.7) >> ++<< /S /GoTo /D (chapter.2) >> + endobj + 88 0 obj +-(\376\377\000T\000h\000r\000e\000a\000d\000\040\000s\000a\000f\000e\000t\000y) ++(Hardware Locality \(hwloc\) Module Index) + endobj + 89 0 obj +-<< /S /GoTo /D (chapter.8) >> ++<< /S /GoTo /D (section.2.1) >> + endobj + 92 0 obj +-(\376\377\000E\000m\000b\000e\000d\000d\000i\000n\000g\000\040\000h\000w\000l\000o\000c\000\040\000i\000n\000\040\000o\000t\000h\000e\000r\000\040\000s\000o\000f\000t\000w\000a\000r\000e) ++(Hardware Locality \(hwloc\) Modules) + endobj + 93 0 obj +-<< /S /GoTo /D (section.8.1) >> ++<< /S /GoTo /D (chapter.3) >> + endobj + 96 0 obj +-(\376\377\000U\000s\000i\000n\000g\000\040\000h\000w\000l\000o\000c\000'\000s\000\040\000M\0004\000\040\000E\000m\000b\000e\000d\000d\000i\000n\000g\000\040\000C\000a\000p\000a\000b\000i\000l\000i\000t\000i\000e\000s) ++(Hardware Locality \(hwloc\) Data Structure Index) + endobj + 97 0 obj +-<< /S /GoTo /D (section.8.2) >> ++<< /S /GoTo /D (section.3.1) >> + endobj + 100 0 obj +-(\376\377\000E\000x\000a\000m\000p\000l\000e\000\040\000E\000m\000b\000e\000d\000d\000i\000n\000g\000\040\000h\000w\000l\000o\000c) ++(Hardware Locality \(hwloc\) Data Structures) + endobj + 101 0 obj +-<< /S /GoTo /D (chapter.9) >> ++<< /S /GoTo /D (chapter.4) >> + endobj + 104 0 obj +-(\376\377\000S\000w\000i\000t\000c\000h\000i\000n\000g\000\040\000f\000r\000o\000m\000\040\000P\000L\000P\000A\000\040\000t\000o\000\040\000h\000w\000l\000o\000c) ++(Hardware Locality \(hwloc\) File Index) + endobj + 105 0 obj +-<< /S /GoTo /D (section.9.1) >> ++<< /S /GoTo /D (section.4.1) >> + endobj + 108 0 obj +-(\376\377\000T\000o\000p\000o\000l\000o\000g\000y\000\040\000C\000o\000n\000t\000e\000x\000t\000\040\000v\000s\000.\000\040\000C\000a\000c\000h\000i\000n\000g) ++(Hardware Locality \(hwloc\) File List) + endobj + 109 0 obj +-<< /S /GoTo /D (section.9.2) >> ++<< /S /GoTo /D (chapter.5) >> + endobj + 112 0 obj +-(\376\377\000H\000i\000e\000r\000a\000r\000c\000h\000y\000\040\000v\000s\000.\000\040\000C\000o\000r\000e\000@\000S\000o\000c\000k\000e\000t) ++(Hardware Locality \(hwloc\) Module Documentation) + endobj + 113 0 obj +-<< /S /GoTo /D (section.9.3) >> ++<< /S /GoTo /D (section.5.1) >> + endobj + 116 0 obj +-(\376\377\000L\000o\000g\000i\000c\000a\000l\000\040\000v\000s\000.\000\040\000P\000h\000y\000s\000i\000c\000a\000l\000/\000O\000S\000\040\000I\000n\000d\000e\000x\000e\000s) ++(API version) + endobj + 117 0 obj +-<< /S /GoTo /D (section.9.4) >> ++<< /S /GoTo /D (section.5.2) >> + endobj + 120 0 obj +-(\376\377\000C\000o\000u\000n\000t\000i\000n\000g\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n) ++(Topology context) + endobj + 121 0 obj +-<< /S /GoTo /D (chapter.10) >> ++<< /S /GoTo /D (section.5.3) >> + endobj + 124 0 obj +-(\376\377\000F\000r\000e\000q\000u\000e\000n\000t\000l\000y\000\040\000A\000s\000k\000e\000d\000\040\000Q\000u\000e\000s\000t\000i\000o\000n\000s) ++(Object sets) + endobj + 125 0 obj +-<< /S /GoTo /D (section.10.1) >> ++<< /S /GoTo /D (section.5.4) >> + endobj + 128 0 obj +-(\376\377\000I\000\040\000d\000o\000\040\000n\000o\000t\000\040\000w\000a\000n\000t\000\040\000h\000w\000l\000o\000c\000\040\000t\000o\000\040\000r\000e\000d\000i\000s\000c\000o\000v\000e\000r\000\040\000m\000y\000\040\000e\000n\000o\000r\000m\000o\000u\000s\000\040\000m\000a\000c\000h\000i\000n\000e\000\040\000t\000o\000p\000o\000l\000o\000g\000y\000\040\000e\000v\000e\000r\000y\000t\000i\000m\000e\000\040\000I\000\040\000r\000e\000r\000u\000n\000\040\000a\000\040\000p\000r\000o\000c\000e\000s\000s) ++(Topology Object Types) + endobj + 129 0 obj +-<< /S /GoTo /D (chapter.11) >> ++<< /S /GoTo /D (section.5.5) >> + endobj + 132 0 obj +-(\376\377\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x) ++(Topology Objects) + endobj + 133 0 obj +-<< /S /GoTo /D (section.11.1) >> ++<< /S /GoTo /D (section.5.6) >> + endobj + 136 0 obj +-(\376\377\000M\000o\000d\000u\000l\000e\000s) ++(Create and Destroy Topologies) + endobj + 137 0 obj +-<< /S /GoTo /D (chapter.12) >> ++<< /S /GoTo /D (section.5.7) >> + endobj + 140 0 obj +-(\376\377\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e\000\040\000I\000n\000d\000e\000x) ++(Configure Topology Detection) + endobj + 141 0 obj +-<< /S /GoTo /D (section.12.1) >> ++<< /S /GoTo /D (section.5.8) >> + endobj + 144 0 obj +-(\376\377\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e\000s) ++(Tinker with topologies.) + endobj + 145 0 obj +-<< /S /GoTo /D (chapter.13) >> ++<< /S /GoTo /D (section.5.9) >> + endobj + 148 0 obj +-(\376\377\000M\000o\000d\000u\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(Get some Topology Information) + endobj + 149 0 obj +-<< /S /GoTo /D (section.13.1) >> ++<< /S /GoTo /D (section.5.10) >> + endobj + 152 0 obj +-(\376\377\000A\000P\000I\000\040\000v\000e\000r\000s\000i\000o\000n) ++(Retrieve Objects) + endobj + 153 0 obj +-<< /S /GoTo /D (subsection.13.1.1) >> ++<< /S /GoTo /D (section.5.11) >> + endobj + 156 0 obj +-(\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(Object/String Conversion) + endobj + 157 0 obj +-<< /S /GoTo /D (subsubsection.13.1.1.1) >> ++<< /S /GoTo /D (section.5.12) >> + endobj + 160 0 obj +-(\376\377\000H\000W\000L\000O\000C\000\137\000A\000P\000I\000\137\000V\000E\000R\000S\000I\000O\000N) ++(CPU binding) + endobj + 161 0 obj +-<< /S /GoTo /D (section.13.2) >> ++<< /S /GoTo /D (section.5.13) >> + endobj + 164 0 obj +-(\376\377\000T\000o\000p\000o\000l\000o\000g\000y\000\040\000c\000o\000n\000t\000e\000x\000t) ++(Memory binding) + endobj + 165 0 obj +-<< /S /GoTo /D (subsection.13.2.1) >> ++<< /S /GoTo /D (section.5.14) >> + endobj + 168 0 obj +-(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(Object Type Helpers) + endobj + 169 0 obj +-<< /S /GoTo /D (subsubsection.13.2.1.1) >> ++<< /S /GoTo /D (section.5.15) >> + endobj + 172 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000t) ++(Basic Traversal Helpers) + endobj + 173 0 obj +-<< /S /GoTo /D (section.13.3) >> ++<< /S /GoTo /D (section.5.16) >> + endobj + 176 0 obj +-(\376\377\000O\000b\000j\000e\000c\000t\000\040\000s\000e\000t\000s) ++(Finding Objects Inside a CPU set) + endobj + 177 0 obj +-<< /S /GoTo /D (subsection.13.3.1) >> ++<< /S /GoTo /D (section.5.17) >> + endobj + 180 0 obj +-(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(Finding a single Object covering at least CPU set) + endobj + 181 0 obj +-<< /S /GoTo /D (subsubsection.13.3.1.1) >> ++<< /S /GoTo /D (section.5.18) >> + endobj + 184 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000c\000o\000n\000s\000t\000\137\000c\000p\000u\000s\000e\000t\000\137\000t) ++(Finding a set of similar Objects covering at least a CPU set) + endobj + 185 0 obj +-<< /S /GoTo /D (subsubsection.13.3.1.2) >> ++<< /S /GoTo /D (section.5.19) >> + endobj + 188 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000c\000o\000n\000s\000t\000\137\000n\000o\000d\000e\000s\000e\000t\000\137\000t) ++(Cache-specific Finding Helpers) + endobj + 189 0 obj +-<< /S /GoTo /D (subsubsection.13.3.1.3) >> ++<< /S /GoTo /D (section.5.20) >> + endobj + 192 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000c\000p\000u\000s\000e\000t\000\137\000t) ++(Advanced Traversal Helpers) + endobj + 193 0 obj +-<< /S /GoTo /D (subsubsection.13.3.1.4) >> ++<< /S /GoTo /D (section.5.21) >> + endobj + 196 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000n\000o\000d\000e\000s\000e\000t\000\137\000t) ++(Binding Helpers) + endobj + 197 0 obj +-<< /S /GoTo /D (section.13.4) >> ++<< /S /GoTo /D (section.5.22) >> + endobj + 200 0 obj +-(\376\377\000T\000o\000p\000o\000l\000o\000g\000y\000\040\000O\000b\000j\000e\000c\000t\000\040\000T\000y\000p\000e\000s) ++(Cpuset Helpers) + endobj + 201 0 obj +-<< /S /GoTo /D (subsection.13.4.1) >> ++<< /S /GoTo /D (section.5.23) >> + endobj + 204 0 obj +-(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(Nodeset Helpers) + endobj + 205 0 obj +-<< /S /GoTo /D (subsubsection.13.4.1.1) >> ++<< /S /GoTo /D (section.5.24) >> + endobj + 208 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000c\000o\000m\000p\000a\000r\000e\000\137\000t\000y\000p\000e\000s\000\137\000e) ++(Conversion between cpuset and nodeset) + endobj + 209 0 obj +-<< /S /GoTo /D (subsubsection.13.4.1.2) >> ++<< /S /GoTo /D (section.5.25) >> + endobj + 212 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000t\000y\000p\000e\000\137\000t) ++(The bitmap API) + endobj + 213 0 obj +-<< /S /GoTo /D (subsection.13.4.2) >> ++<< /S /GoTo /D (section.5.26) >> + endobj + 216 0 obj +-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(Helpers for manipulating glibc sched affinity) + endobj + 217 0 obj +-<< /S /GoTo /D (subsubsection.13.4.2.1) >> ++<< /S /GoTo /D (section.5.27) >> + endobj + 220 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000c\000o\000m\000p\000a\000r\000e\000\137\000t\000y\000p\000e\000s) ++(Linux-only helpers) + endobj + 221 0 obj +-<< /S /GoTo /D (section.13.5) >> ++<< /S /GoTo /D (section.5.28) >> + endobj + 224 0 obj +-(\376\377\000T\000o\000p\000o\000l\000o\000g\000y\000\040\000O\000b\000j\000e\000c\000t\000s) ++(Helpers for manipulating Linux libnuma unsigned long masks) + endobj + 225 0 obj +-<< /S /GoTo /D (subsection.13.5.1) >> ++<< /S /GoTo /D (section.5.29) >> + endobj + 228 0 obj +-(\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(Helpers for manipulating Linux libnuma bitmask) + endobj + 229 0 obj +-<< /S /GoTo /D (subsubsection.13.5.1.1) >> ++<< /S /GoTo /D (section.5.30) >> + endobj + 232 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000t) ++(Helpers for manipulating Linux libnuma nodemask\137t) + endobj + 233 0 obj +-<< /S /GoTo /D (section.13.6) >> ++<< /S /GoTo /D (section.5.31) >> + endobj + 236 0 obj +-(\376\377\000C\000r\000e\000a\000t\000e\000\040\000a\000n\000d\000\040\000D\000e\000s\000t\000r\000o\000y\000\040\000T\000o\000p\000o\000l\000o\000g\000i\000e\000s) ++(CUDA Driver API Specific Functions) + endobj + 237 0 obj +-<< /S /GoTo /D (subsection.13.6.1) >> ++<< /S /GoTo /D (section.5.32) >> + endobj + 240 0 obj +-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(CUDA Runtime API Specific Functions) + endobj + 241 0 obj +-<< /S /GoTo /D (subsubsection.13.6.1.1) >> ++<< /S /GoTo /D (section.5.33) >> + endobj + 244 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000c\000h\000e\000c\000k) ++(OpenFabrics-Specific Functions) + endobj + 245 0 obj +-<< /S /GoTo /D (subsubsection.13.6.1.2) >> ++<< /S /GoTo /D (section.5.34) >> + endobj + 248 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000d\000e\000s\000t\000r\000o\000y) ++(Myrinet Express-Specific Functions) + endobj + 249 0 obj +-<< /S /GoTo /D (subsubsection.13.6.1.3) >> ++<< /S /GoTo /D (chapter.6) >> + endobj + 252 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000i\000n\000i\000t) ++(Hardware Locality \(hwloc\) Data Structure Documentation) + endobj + 253 0 obj +-<< /S /GoTo /D (subsubsection.13.6.1.4) >> ++<< /S /GoTo /D (section.6.1) >> + endobj + 256 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000l\000o\000a\000d) ++(hwloc\137obj Struct Reference) + endobj + 257 0 obj +-<< /S /GoTo /D (section.13.7) >> ++<< /S /GoTo /D (section.6.2) >> + endobj + 260 0 obj +-(\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000e\000\040\000T\000o\000p\000o\000l\000o\000g\000y\000\040\000D\000e\000t\000e\000c\000t\000i\000o\000n) ++(hwloc\137obj\137attr\137u Union Reference) + endobj + 261 0 obj +-<< /S /GoTo /D (subsection.13.7.1) >> ++<< /S /GoTo /D (section.6.3) >> + endobj + 264 0 obj +-(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) ++(hwloc\137obj\137attr\137u::hwloc\137cache\137attr\137s Struct Reference) + endobj + 265 0 obj +-<< /S /GoTo /D (subsection.13.7.2) >> ++<< /S /GoTo /D (section.6.4) >> + endobj + 268 0 obj +-(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(hwloc\137obj\137attr\137u::hwloc\137group\137attr\137s Struct Reference) + endobj + 269 0 obj +-<< /S /GoTo /D (subsubsection.13.7.2.1) >> ++<< /S /GoTo /D (section.6.5) >> + endobj + 272 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000f\000l\000a\000g\000s\000\137\000e) ++(hwloc\137obj\137info\137s Struct Reference) + endobj + 273 0 obj +-<< /S /GoTo /D (subsection.13.7.3) >> ++<< /S /GoTo /D (section.6.6) >> + endobj + 276 0 obj +-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(hwloc\137obj\137memory\137s Struct Reference) + endobj + 277 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.1) >> ++<< /S /GoTo /D (section.6.7) >> + endobj + 280 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000g\000e\000t\000\137\000s\000u\000p\000p\000o\000r\000t) ++(hwloc\137obj\137memory\137s::hwloc\137obj\137memory\137page\137type\137s Struct Reference) + endobj + 281 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.2) >> ++<< /S /GoTo /D (section.6.8) >> + endobj + 284 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000i\000g\000n\000o\000r\000e\000\137\000a\000l\000l\000\137\000k\000e\000e\000p\000\137\000s\000t\000r\000u\000c\000t\000u\000r\000e) ++(hwloc\137topology\137cpubind\137support Struct Reference) + endobj + 285 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.3) >> ++<< /S /GoTo /D (section.6.9) >> + endobj + 288 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000i\000g\000n\000o\000r\000e\000\137\000t\000y\000p\000e) ++(hwloc\137topology\137discovery\137support Struct Reference) + endobj + 289 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.4) >> ++<< /S /GoTo /D (section.6.10) >> + endobj + 292 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000i\000g\000n\000o\000r\000e\000\137\000t\000y\000p\000e\000\137\000k\000e\000e\000p\000\137\000s\000t\000r\000u\000c\000t\000u\000r\000e) ++(hwloc\137topology\137membind\137support Struct Reference) + endobj + 293 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.5) >> ++<< /S /GoTo /D (section.6.11) >> + endobj + 296 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000s\000e\000t\000\137\000f\000l\000a\000g\000s) ++(hwloc\137topology\137support Struct Reference) + endobj + 297 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.6) >> ++<< /S /GoTo /D (chapter.7) >> + endobj + 300 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000s\000e\000t\000\137\000f\000s\000r\000o\000o\000t) ++(Hardware Locality \(hwloc\) File Documentation) + endobj + 301 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.7) >> ++<< /S /GoTo /D (section.7.1) >> + endobj + 304 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000s\000e\000t\000\137\000p\000i\000d) ++(bitmap.h File Reference) + endobj + 305 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.8) >> ++<< /S /GoTo /D (section.7.2) >> + endobj + 308 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000s\000e\000t\000\137\000s\000y\000n\000t\000h\000e\000t\000i\000c) ++(cuda.h File Reference) + endobj + 309 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.9) >> ++<< /S /GoTo /D (section.7.3) >> + endobj + 312 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000s\000e\000t\000\137\000x\000m\000l) ++(cudart.h File Reference) + endobj + 313 0 obj +-<< /S /GoTo /D (subsubsection.13.7.3.10) >> ++<< /S /GoTo /D (section.7.4) >> + endobj + 316 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000s\000e\000t\000\137\000x\000m\000l\000b\000u\000f\000f\000e\000r) ++(glibc-sched.h File Reference) + endobj + 317 0 obj +-<< /S /GoTo /D (section.13.8) >> ++<< /S /GoTo /D (section.7.5) >> + endobj + 320 0 obj +-(\376\377\000T\000i\000n\000k\000e\000r\000\040\000w\000i\000t\000h\000\040\000t\000o\000p\000o\000l\000o\000g\000i\000e\000s\000.) ++(helper.h File Reference) + endobj + 321 0 obj +-<< /S /GoTo /D (subsection.13.8.1) >> ++<< /S /GoTo /D (section.7.6) >> + endobj + 324 0 obj +-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) ++(hwloc.doxy File Reference) + endobj + 325 0 obj +-<< /S /GoTo /D (subsubsection.13.8.1.1) >> ++<< /S /GoTo /D (section.7.7) >> + endobj + 328 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000e\000x\000p\000o\000r\000t\000\137\000x\000m\000l) ++(hwloc.h File Reference) + endobj + 329 0 obj +-<< /S /GoTo /D (subsubsection.13.8.1.2) >> ++<< /S /GoTo /D (section.7.8) >> + endobj + 332 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000e\000x\000p\000o\000r\000t\000\137\000x\000m\000l\000b\000u\000f\000f\000e\000r) ++(linux-libnuma.h File Reference) + endobj + 333 0 obj +-<< /S /GoTo /D (subsubsection.13.8.1.3) >> ++<< /S /GoTo /D (section.7.9) >> + endobj + 336 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000i\000n\000s\000e\000r\000t\000\137\000m\000i\000s\000c\000\137\000o\000b\000j\000e\000c\000t\000\137\000b\000y\000\137\000c\000p\000u\000s\000e\000t) ++(linux.h File Reference) + endobj + 337 0 obj +-<< /S /GoTo /D (subsubsection.13.8.1.4) >> ++<< /S /GoTo /D (section.7.10) >> + endobj + 340 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000i\000n\000s\000e\000r\000t\000\137\000m\000i\000s\000c\000\137\000o\000b\000j\000e\000c\000t\000\137\000b\000y\000\137\000p\000a\000r\000e\000n\000t) ++(myriexpress.h File Reference) + endobj + 341 0 obj +-<< /S /GoTo /D (section.13.9) >> ++<< /S /GoTo /D (section.7.11) >> + endobj + 344 0 obj +-(\376\377\000G\000e\000t\000\040\000s\000o\000m\000e\000\040\000T\000o\000p\000o\000l\000o\000g\000y\000\040\000I\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n) ++(openfabrics-verbs.h File Reference) + endobj + 345 0 obj +-<< /S /GoTo /D (subsection.13.9.1) >> +-endobj +-348 0 obj +-(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +-endobj +-349 0 obj +-<< /S /GoTo /D (subsubsection.13.9.1.1) >> +-endobj +-352 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000t\000y\000p\000e\000\137\000d\000e\000p\000t\000h\000\137\000e) +-endobj +-353 0 obj +-<< /S /GoTo /D (subsection.13.9.2) >> +-endobj +-356 0 obj +-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +-endobj +-357 0 obj +-<< /S /GoTo /D (subsubsection.13.9.2.1) >> +-endobj +-360 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000d\000e\000p\000t\000h\000\137\000t\000y\000p\000e) +-endobj +-361 0 obj +-<< /S /GoTo /D (subsubsection.13.9.2.2) >> +-endobj +-364 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000n\000b\000o\000b\000j\000s\000\137\000b\000y\000\137\000d\000e\000p\000t\000h) +-endobj +-365 0 obj +-<< /S /GoTo /D (subsubsection.13.9.2.3) >> +-endobj +-368 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000n\000b\000o\000b\000j\000s\000\137\000b\000y\000\137\000t\000y\000p\000e) +-endobj +-369 0 obj +-<< /S /GoTo /D (subsubsection.13.9.2.4) >> +-endobj +-372 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000t\000y\000p\000e\000\137\000d\000e\000p\000t\000h) +-endobj +-373 0 obj +-<< /S /GoTo /D (subsubsection.13.9.2.5) >> +-endobj +-376 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000g\000e\000t\000\137\000d\000e\000p\000t\000h) +-endobj +-377 0 obj +-<< /S /GoTo /D (subsubsection.13.9.2.6) >> +-endobj +-380 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000t\000o\000p\000o\000l\000o\000g\000y\000\137\000i\000s\000\137\000t\000h\000i\000s\000s\000y\000s\000t\000e\000m) +-endobj +-381 0 obj +-<< /S /GoTo /D (section.13.10) >> +-endobj +-384 0 obj +-(\376\377\000R\000e\000t\000r\000i\000e\000v\000e\000\040\000O\000b\000j\000e\000c\000t\000s) +-endobj +-385 0 obj +-<< /S /GoTo /D (subsection.13.10.1) >> +-endobj +-388 0 obj +-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +-endobj +-389 0 obj +-<< /S /GoTo /D (subsubsection.13.10.1.1) >> +-endobj +-392 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000o\000b\000j\000\137\000b\000y\000\137\000d\000e\000p\000t\000h) +-endobj +-393 0 obj +-<< /S /GoTo /D (subsubsection.13.10.1.2) >> +-endobj +-396 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000o\000b\000j\000\137\000b\000y\000\137\000t\000y\000p\000e) +-endobj +-397 0 obj +-<< /S /GoTo /D (section.13.11) >> +-endobj +-400 0 obj +-(\376\377\000O\000b\000j\000e\000c\000t\000/\000S\000t\000r\000i\000n\000g\000\040\000C\000o\000n\000v\000e\000r\000s\000i\000o\000n) +-endobj +-401 0 obj +-<< /S /GoTo /D (subsection.13.11.1) >> +-endobj +-404 0 obj +-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +-endobj +-405 0 obj +-<< /S /GoTo /D (subsubsection.13.11.1.1) >> +-endobj +-408 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000a\000t\000t\000r\000\137\000s\000n\000p\000r\000i\000n\000t\000f) +-endobj +-409 0 obj +-<< /S /GoTo /D (subsubsection.13.11.1.2) >> +-endobj +-412 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000c\000p\000u\000s\000e\000t\000\137\000s\000n\000p\000r\000i\000n\000t\000f) +-endobj +-413 0 obj +-<< /S /GoTo /D (subsubsection.13.11.1.3) >> +-endobj +-416 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000g\000e\000t\000\137\000i\000n\000f\000o\000\137\000b\000y\000\137\000n\000a\000m\000e) +-endobj +-417 0 obj +-<< /S /GoTo /D (subsubsection.13.11.1.4) >> +-endobj +-420 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000s\000n\000p\000r\000i\000n\000t\000f) +-endobj +-421 0 obj +-<< /S /GoTo /D (subsubsection.13.11.1.5) >> +-endobj +-424 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000t\000y\000p\000e\000\137\000o\000f\000\137\000s\000t\000r\000i\000n\000g) +-endobj +-425 0 obj +-<< /S /GoTo /D (subsubsection.13.11.1.6) >> +-endobj +-428 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000t\000y\000p\000e\000\137\000s\000n\000p\000r\000i\000n\000t\000f) +-endobj +-429 0 obj +-<< /S /GoTo /D (subsubsection.13.11.1.7) >> +-endobj +-432 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000o\000b\000j\000\137\000t\000y\000p\000e\000\137\000s\000t\000r\000i\000n\000g) +-endobj +-433 0 obj +-<< /S /GoTo /D (section.13.12) >> ++<< /S /GoTo /D [346 0 R /Fit ] >> + endobj +-436 0 obj +-(\376\377\000C\000P\000U\000\040\000b\000i\000n\000d\000i\000n\000g) +-endobj +-437 0 obj +-<< /S /GoTo /D (subsection.13.12.1) >> +-endobj +-440 0 obj +-(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +-endobj +-441 0 obj +-<< /S /GoTo /D (subsection.13.12.2) >> +-endobj +-444 0 obj +-(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +-endobj +-445 0 obj +-<< /S /GoTo /D (subsubsection.13.12.2.1) >> +-endobj +-448 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000c\000p\000u\000b\000i\000n\000d\000\137\000f\000l\000a\000g\000s\000\137\000t) +-endobj +-449 0 obj +-<< /S /GoTo /D (subsection.13.12.3) >> +-endobj +-452 0 obj +-(\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +-endobj +-453 0 obj +-<< /S /GoTo /D (subsubsection.13.12.3.1) >> +-endobj +-456 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000c\000p\000u\000b\000i\000n\000d) +-endobj +-457 0 obj +-<< /S /GoTo /D (subsubsection.13.12.3.2) >> +-endobj +-460 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000p\000r\000o\000c\000\137\000c\000p\000u\000b\000i\000n\000d) +-endobj +-461 0 obj +-<< /S /GoTo /D (subsubsection.13.12.3.3) >> +-endobj +-464 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000g\000e\000t\000\137\000t\000h\000r\000e\000a\000d\000\137\000c\000p\000u\000b\000i\000n\000d) +-endobj +-465 0 obj +-<< /S /GoTo /D (subsubsection.13.12.3.4) >> +-endobj +-468 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000s\000e\000t\000\137\000c\000p\000u\000b\000i\000n\000d) +-endobj +-469 0 obj +-<< /S /GoTo /D (subsubsection.13.12.3.5) >> +-endobj +-472 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000s\000e\000t\000\137\000p\000r\000o\000c\000\137\000c\000p\000u\000b\000i\000n\000d) +-endobj +-473 0 obj +-<< /S /GoTo /D (subsubsection.13.12.3.6) >> +-endobj +-476 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000s\000e\000t\000\137\000t\000h\000r\000e\000a\000d\000\137\000c\000p\000u\000b\000i\000n\000d) +-endobj +-477 0 obj +-<< /S /GoTo /D (section.13.13) >> +-endobj +-480 0 obj +-(\376\377\000M\000e\000m\000o\000r\000y\000\040\000b\000i\000n\000d\000i\000n\000g) +-endobj +-481 0 obj +-<< /S /GoTo /D (subsection.13.13.1) >> +-endobj +-484 0 obj +-(\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +-endobj +-485 0 obj +-<< /S /GoTo /D (subsection.13.13.2) >> +-endobj +-488 0 obj +-(\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) +-endobj +-489 0 obj +-<< /S /GoTo /D (subsubsection.13.13.2.1) >> +-endobj +-492 0 obj +-(\376\377\000h\000w\000l\000o\000c\000\137\000m\000e\000m\000b\000i\000n\000d\000\137\000f\000l\000a\000g\000s\000\137\000t) ++348 0 obj << ++/Length 282 ++/Filter /FlateDecode ++>> ++stream ++xڍQ=O�0��+<&C�;%� ++E� :�-H!��V���Kl*$���z����#�PT�����=g7������RihE)�g�O�/,YN�R;&�匽n��[)iPڊf'���$S&P�=�w�ԝ ++¼�B�T�?���������S?zv(���.La� ��Ƕ/��}�#k:T`d��j�D M�N��j���Y���#(��M��B��&%���C x^� +f��C��f��[�5�6�1�]I�v�zeT��pn��4����cݺ����