Copyright © 2009 CNRS
Copyright © 2009-2011 INRIA
Copyright © 2009-2011 Université Bordeaux 1
Copyright © 2009-2011 Cisco Systems, Inc.  All rights reserved.

$COPYRIGHT$

Additional copyrights may follow

$HEADER$

===========================================================================

This file contains the main features as well as overviews of specific
bug fixes (and other actions) for each version of hwloc since version
0.9 (as initially released as "libtopology", then re-branded to "hwloc"
in v0.9.1).


Version 1.1.1
-------------
* Add hwloc_get_api_version() which returns the version of hwloc used
  at runtime. Thanks to Guy Streeter for the suggestion.
* Fix the number of hugepages reported for NUMA nodes on Linux.
* Fix hwloc_bitmap_to_ulong() right after allocating the bitmap.
  Thanks to Bernd Kallies for reporting the problem.
* Fix hwloc_bitmap_from_ith_ulong() to properly zero the first ulong.
  Thanks to Guy Streeter for reporting the problem.
* Fix hwloc_get_membind_nodeset() on Linux.
  Thanks to Bernd Kallies for reporting the problem and providing a patch.
* Fix some file descriptor leaks in the Linux discovery.
* Fix the minimum width of NUMA nodes, caches and the legend in the graphical
  lstopo output. Thanks to Jirka Hladky for reporting the problem.
* Various fixes to bitmap conversion from/to taskset-strings.
* Fix and document snprintf functions behavior when the buffer size is too
  small or zero. Thanks to Guy Streeter for reporting the problem.
* Fix configure to avoid spurious enabling of the cpuid backend.
  Thanks to Tim Anderson for reporting the problem.
* Cleanup error management in hwloc-gather-topology.sh.
  Thanks to Jirka Hladky for reporting the problem and providing a patch.
* Add a manpage and usage for hwloc-gather-topology.sh on Linux.
  Thanks to Jirka Hladky for providing a patch.
* Memory binding documentation enhancements.


Version 1.1.0
-------------

* API
  + Increase HWLOC_API_VERSION to 0x00010100 so that API changes may be
    detected at build-time.
  + Add a memory binding interface.
  + The cpuset API (hwloc/cpuset.h) is now deprecated. It is replaced by
    the bitmap API (hwloc/bitmap.h) which offers the same features with more
    generic names since it applies to CPU sets, node sets and more.
    Backward compatibility with the cpuset API and ABI is still provided but
    it will be removed in a future release.
    Old types (hwloc_cpuset_t, ...) are still available as a way to clarify
    what kind of hwloc_bitmap_t each API function manipulates.
    Upgrading to the new API only requires to replace hwloc_cpuset_ function
    calls with the corresponding hwloc_bitmap_ calls, with the following
    renaming exceptions:
    - hwloc_cpuset_cpu -> hwloc_bitmap_only
    - hwloc_cpuset_all_but_cpu -> hwloc_bitmap_allbut
    - hwloc_cpuset_from_string -> hwloc_bitmap_sscanf
  + Add an `infos' array in each object to store couples of info names and
    values. It enables generic storage of things like the old dmi board infos
    that were previously stored in machine specific attributes.
  + Add linesize cache attribute.
* Features
  + Bitmaps (and thus CPU sets and node sets) are dynamically (re-)allocated,
    the maximal number of CPUs (HWLOC_NBMAXCPUS) has been removed.
  + Improve the distance-based grouping code to better support irregular
    distance matrices.
  + Add support for device-tree to get cache information (useful on Power
    architectures).
* Helpers
  + Add NVIDIA CUDA helpers in cuda.h and cudart.h to ease interoperability
    with CUDA Runtime and Driver APIs.
  + Add Myrinet Express helper in myriexpress.h to ease interoperability.
* Tools
  + lstopo now displays physical/OS indexes by default in graphical mode
    (use -l to switch back to logical indexes). The textual output still uses
    logical by default (use -p to switch to physical indexes).
  + lstopo prefixes logical indexes with `L#' and physical indexes with `P#'.
    Physical indexes are also printed as `P#N' instead of `phys=N' within
    object attributes (in parentheses).
  + Add a legend at the bottom of the lstopo graphical output, use --no-legend
    to remove it.
  + Add hwloc-ps to list process' bindings.
  + Add --membind and --mempolicy options to hwloc-bind.
  + Improve tools command-line options by adding a generic --input option
    (and more) which replaces the old --xml, --synthetic and --fsys-root.
  + Cleanup lstopo output configuration by adding --output-format.
  + Add --intersect in hwloc-calc, and replace --objects with --largest.
  + Add the ability to work on standard input in hwloc-calc.
  + Add --from, --to and --at in hwloc-distrib.
  + Add taskset-specific functions and command-line tools options to
    manipulate CPU set strings in the format of the taskset program.
  + Install hwloc-gather-topology.sh on Linux.


Version 1.0.3
-------------

* Fix support for Linux cpuset when emulated by a cgroup mount point.
* Remove unneeded runtime dependency on libibverbs.so in the library and
  all utils programs.
* Fix hwloc_cpuset_to_linux_libnuma_ulongs in case of non-linear OS-indexes
  for NUMA nodes.
* lstopo now displays physical/OS indexes by default in graphical mode
  (use -l to switch back to logical indexes). The textual output still uses
  logical by default (use -p to switch to physical indexes).


Version 1.0.2
-------------

* Public headers can now be included directly from C++ programs.
* Solaris fix for non-contiguous cpu numbers.  Thanks to Rolf vandeVaart for
  reporting the issue.
* Darwin 10.4 fix.  Thanks to Olivier Cessenat for reporting the issue.
* Revert 1.0.1 patch that ignored sockets with unknown ID values since it
  only slightly helped POWER7 machines with old Linux kernels while it
  prevents recent kernels from getting the complete POWER7 topology.
* Fix hwloc_get_common_ancestor_obj().
* Remove arch-specific bits in public headers.
* Some fixes in the lstopo graphical output.
* Various man page clarifications and minor updates.


Version 1.0.1
-------------

* Various Solaris fixes.  Thanks to Yannick Martin for reporting the issue.
* Fix "non-native" builds on x86 platforms (e.g., when building 32
  bit executables with compilers that natively build 64 bit).
* Ignore sockets with unknown ID values (which fixes issues on POWER7
  machines).  Thanks to Greg Bauer for reporting the issue.
* Various man page clarifications and minor updates.
* Fixed memory leaks in hwloc_setup_group_from_min_distance_clique().
* Fix cache type filtering on MS Windows 7.  Thanks to Αλέξανδρος
  Παπαδογιαννάκ for reporting the issue.
* Fixed warnings when compiling with -DNDEBUG.


Version 1.0.0
-------------

* The ABI of the library has changed.
* Backend updates
  + Add FreeBSD support.
  + Add x86 cpuid based backend.
  + Add Linux cgroup support to the Linux cpuset code.
  + Support binding of entire multithreaded process on Linux.
  + Fix and enable Group support in Windows.
  + Cleanup XML export/import.
* Objects
  + HWLOC_OBJ_PROC is renamed into HWLOC_OBJ_PU for "Processing Unit",
    its stringified type name is now "PU".
  + Use new HWLOC_OBJ_GROUP objects instead of MISC when grouping
    objects according to NUMA distances or arbitrary OS aggregation.
  + Rework memory attributes.
  + Add different cpusets in each object to specify processors that
    are offline, unavailable, ...
  + Cleanup the storage of object names and DMI infos.
* Features
  + Add support for looking up specific PID topology information.
  + Add hwloc_topology_export_xml() to export the topology in a XML file.
  + Add hwloc_topology_get_support() to retrieve the supported features
    for the current topology context.
  + Support non-SYSTEM object as the root of the tree, use MACHINE in
    most common cases.
  + Add hwloc_get_*cpubind() routines to retrieve the current binding
    of processes and threads.
* API
  + Add HWLOC_API_VERSION to help detect the currently used API version.
  + Add missing ending "e" to *compare* functions.
  + Add several routines to emulate PLPA functions.
  + Rename and rework the cpuset and/or/xor/not/clear operators to output
    their result in a dedicated argument instead of modifying one input.
  + Deprecate hwloc_obj_snprintf() in favor of hwloc_obj_type/attr_snprintf().
  + Clarify the use of parent and ancestor in the API, do not use father.
  + Replace hwloc_get_system_obj() with hwloc_get_root_obj().
  + Return -1 instead of HWLOC_OBJ_TYPE_MAX in the API since the latter
    isn't public.
  + Relax constraints in hwloc_obj_type_of_string().
  + Improve displaying of memory sizes.
  + Add 0x prefix to cpuset strings.
* Tools
  + lstopo now displays logical indexes by default, use --physical to
    revert back to OS/physical indexes.
  + Add colors in the lstopo graphical outputs to distinguish between online,
    offline, reserved, ... objects.
  + Extend lstopo to show cpusets, filter objects by type, ...
  + Renamed hwloc-mask into hwloc-calc which supports many new options.
* Documentation
  + Add a hwloc(7) manpage containing general information.
  + Add documentation about how to switch from PLPA to hwloc.
  + Cleanup the distributed documentation files.
* Miscellaneous
  + Many compilers warning fixes.
  + Cleanup the ABI by using the visibility attribute.
  + Add project embedding support.


Version 0.9.4 (unreleased)
--------------------------

* Fix reseting colors to normal in lstopo -.txt output.
* Fix Linux pthread_t binding error report.


Version 0.9.3
-------------

* Fix autogen.sh to work with Autoconf 2.63.
* Fix various crashes in particular conditions:
  - xml files with root attributes
  - offline CPUs
  - partial sysfs support
  - unparseable /proc/cpuinfo
  - ignoring NUMA level while Misc level have been generated
* Tweak documentation a bit
* Do not require the pthread library for binding the current thread on Linux
* Do not erroneously consider the sched_setaffinity prototype is the old version
  when there is actually none.
* Fix _syscall3 compilation on archs for which we do not have the
  sched_setaffinity system call number.
* Fix AIX binding.
* Fix libraries dependencies: now only lstopo depends on libtermcap, fix
  binutils-gold link
* Have make check always build and run hwloc-hello.c
* Do not limit size of a cpuset.


Version 0.9.2
-------------

* Trivial documentation changes.


Version 0.9.1
-------------

* Re-branded to "hwloc" and moved to the Open MPI project, relicensed under the
  BSD license.
* The prefix of all functions and tools is now hwloc, and some public
  functions were also renamed for real.
* Group NUMA nodes into Misc objects according to their physical distance
  that may be reported by the OS/BIOS.
  May be ignored by setting HWLOC_IGNORE_DISTANCES=1 in the environment.
* Ignore offline CPUs on Solaris.
* Improved binding support on AIX.
* Add HP-UX support.
* CPU sets are now allocated/freed dynamically.
* Add command line options to tune the lstopo graphical output, add
  semi-graphical textual output
* Extend topobind to support multiple cpusets or objects on the command
  line as topomask does.
* Add an Infiniband-specific helper hwloc/openfabrics-verbs.h to retrieve
  the physical location of IB devices.


Version 0.9 (libtopology)
-------------------------

* First release.
