The Hardware Locality (hwloc) team is pleased to announce the
release of v2.0.0:

   http://www.open-mpi.org/projects/hwloc/

v2.0.0 is the result of more than 2 years of work.
There are lots of changes as listed below, including
* Better support for upcoming heterogeneous/hybrid/non-volatile
  memory technologies, which involves significant changes in the
  way NUMA nodes are attached to the tree and placed in a level.
* API changes to cleanup bad ideas from 8 years ago

The documentation contains a guide for upgrading your code to
the new v2.0 API:
  https://www.open-mpi.org/projects/hwloc/doc/v2.0.0/a00327.php
If you need more help, please contact hwloc-us...@lists.open-mpi.org

If you really can't upgrade now, note that we will still publish
other v1.11.x ultrastable releases in the future months.


Version 2.0.0
-------------
*** The ABI of the library has changed. ***
  For instance some hwloc_obj fields were reordered, added or removed, see 
below.
  + HWLOC_API_VERSION and hwloc_get_api_version() now give 0x00020000.
  + See "How do I handle ABI breaks and API upgrades ?" in the FAQ
    and "Upgrading to hwloc 2.0 API" in the documentation.
* Major API changes
  + Memory, I/O and Misc objects are now stored in dedicated children lists,
    not in the usual children list that is now only used for CPU-side objects.
    - hwloc_get_next_child() may still be used to iterate over these 4 lists
      of children at once.
    - hwloc_obj_type_is_normal(), _memory() and _io() may be used to check
      the kind of a given object type.
  + Topologies always have at least one NUMA object. On non-NUMA machines,
    a single NUMA object is added to describe the entire machine memory.
    The NUMA level cannot be ignored anymore.
  + The NUMA level is special since NUMA nodes are not in the main hierarchy
    of objects anymore. Its depth is a fake negative depth that should not be
    compared with normal levels.
    - If all memory objects are attached to parents at the same depth,
      it may be retrieved with hwloc_get_memory_parents_depth().
  + The HWLOC_OBJ_CACHE type is replaced with 8 types HWLOC_OBJ_L[1-5]CACHE
    and HWLOC_OBJ_L[1-3]ICACHE that remove the need to disambiguate levels
    when looking for caches with _by_type() functions.
    - New hwloc_obj_type_is_{,d,i}cache() functions may be used to check whether
      a given type is a cache.
  + Reworked ignoring/filtering API
    - Replace hwloc_topology_ignore*() functions with 
hwloc_topology_set_type_filter()
      and hwloc_topology_set_all_types_filter().
      . Contrary to hwloc_topology_ignore_{type,all}_keep_structure() which
        removed individual objects, HWLOC_TYPE_FILTER_KEEP_STRUCTURE only 
removes
        entire levels (so that topology do not become too asymmetric).
    - Remove HWLOC_TOPOLOGY_FLAG_ICACHES in favor of 
hwloc_topology_set_icache_types_filter()
      with HWLOC_TYPE_FILTER_KEEP_ALL.
    - Remove HWLOC_TOPOLOGY_FLAG_IO_DEVICES, _IO_BRIDGES and _WHOLE_IO in favor 
of
      hwloc_topology_set_io_types_filter() with HWLOC_TYPE_FILTER_KEEP_ALL or
      HWLOC_TYPE_FILTER_KEEP_IMPORTANT.
  + The distance API has been completely reworked. It is now described
    in hwloc/distances.h.
  + Return values
    - Most functions in hwloc/bitmap.h now return an int that may be negative
      in case of failure to realloc/extend the internal storage of a bitmap.
    - hwloc_obj_add_info() also returns an int in case allocations fail.
* Minor API changes
  + Object attributes
    - obj->memory is removed.
      . local_memory and page_types attributes are now in obj->attr->numanode
      . total_memory moves obj->total_memory.
    - Objects do not have allowed_cpuset and allowed_nodeset anymore.
      They are only available for the entire topology using
      hwloc_topology_get_allowed_cpuset() and 
hwloc_topology_get_allowed_nodeset().
    - Objects now have a "subtype" field that supersedes former "Type" and
      "CoProcType" info attributes.
  + Object and level depths are now signed ints.
  + Object string printing and parsing
    - hwloc_type_sscanf() deprecates the old hwloc_obj_type_sscanf().
    - hwloc_type_sscanf_as_depth() is added to convert a type name into
      a level depth.
    - hwloc_obj_cpuset_snprintf() is deprecated in favor of 
hwloc_bitmap_snprintf().
  + Misc objects
    - Replace hwloc_topology_insert_misc_object_by_cpuset() with
      hwloc_topology_insert_group_object() to precisely specify the location
      of an additional hierarchy level in the topology.
    - Misc objects have their own level and depth to iterate over all of them.
    - Misc objects may now only be inserted as a leaf object with
      hwloc_topology_insert_misc_object() which deprecates
      hwloc_topology_insert_misc_object_by_parent().
  + hwloc_topology_restrict() doesn't remove objects that contain memory
    by default anymore.
    - The list of existing restrict flags was modified.
  + The discovery support array now contains some NUMA specific bits.
  + XML export functions take an additional flags argument,
    for instance for exporting XMLs that are compatible with hwloc 1.x.
  + Functions diff_load_xml*(), diff_export_xml*() and diff_destroy() in
    hwloc/diff.h do not need a topology as first parameter anymore.
  + hwloc_parse_cpumap_file () superseded by hwloc_linux_read_path_as_cpumask()
    in hwloc/linux.h.
  + HWLOC_MEMBIND_DEFAULT and HWLOC_MEMBIND_FIRSTTOUCH were clarified.
* New APIs and Features
  + Add hwloc/shmem.h for sharing topologies between processes running on
    the same machine (for reducing the memory footprint).
  + Add the experimental netloc subproject. It is disabled by default
    and can be enabled with --enable-netloc.
    It currently brings command-line tools to gather and visualize the
    topology of InfiniBand fabrics, and an API to convert such topologies
    into Scotch architectures for process mapping.
    See the documentation for details.
* Removed APIs and features
  + Remove the online_cpuset from struct hwloc_obj. Offline PUs get unknown
    topologies on Linux nowadays, and wrong topology on Solaris. Other OS
    do not support them. And one cannot do much about them anyway. Just keep
    them in complete_cpuset.
  + Remove the now-unused "System" object type HWLOC_OBJ_SYSTEM,
    defined to MACHINE for backward compatibility.
  + The almost-unused "os_level" attribute has been removed from the
    hwloc_obj structure.
  + Remove the custom interface for assembling the topologies of different
    nodes as well as the hwloc-assembler tools.
  + hwloc_topology_set_fsroot() is removed, the environment variable
    HWLOC_FSROOT may be used for the same remote testing/debugging purpose.
  + Remove the deprecated hwloc_obj_snprintf(), hwloc_obj_type_of_string(),
    hwloc_distribute[v]().
  * Remove Myrinet Express interoperability (hwloc/myriexpress.h).
  + Remove Kerrighed support from the Linux backend.
  + Remove Tru64 (OSF/1) support.
    - Remove HWLOC_MEMBIND_REPLICATE which wasn't available anywhere else.
* Backend improvements
  + Linux
    - OS devices do not have to be attached through PCI anymore,
      for instance enabling the discovery of NVDIMM block devices.
    - Remove the dependency on libnuma.
    - Add a SectorSize attribute to block OS devices.
  + Mac OS X
    - Fix detection of cores and hyperthreads.
    - Add CPUVendor, Model, ... attributes.
  + Windows
    - Add get_area_memlocation().
* Tools
  + lstopo and hwloc-info have a new --filter option matching the new filtering 
API.
  + lstopo can be given --children-layout=plain to force a basic displaying
    of memory and normal children together below their parent.
  + hwloc-distances was removed and replaced with lstopo --distances.
* Misc
  + Exports
    - Exporting to synthetic now ignores I/O and Misc objects.
  + PCI discovery
    - Separate OS device discovery from PCI discovery. Only the latter is 
disabled
      with --disable-pci at configure time. Both may be disabled with 
--disable-io.
    - The `linuxpci' component is now renamed into `linuxio'.
    - The old `libpci' component name from hwloc 1.6 is not supported anymore,
      only the `pci' name from hwloc 1.7 is now recognized.
    - The HWLOC_PCI_<domain>_<bus>_LOCALCPUS environment variables are 
superseded
      with a single HWLOC_PCI_LOCALITY where bus ranges may be specified.
    - Do not set PCI devices and bridges name automatically. Vendor and device
      names are already in info attributes.
  + Components and discovery
    - Add HWLOC_SYNTHETIC environment variable to enforce a synthetic topology
      as if hwloc_topology_set_synthetic() had been called.
    - HWLOC_COMPONENTS doesn't support xml or synthetic component attributes
      anymore, they should be passed in HWLOC_XMLFILE or HWLOC_SYNTHETIC 
instead.
    - HWLOC_COMPONENTS takes precedence over other environment variables
      for selecting components.
  + hwloc now requires a C99 compliant compiler.

Changes since rc2 are basically only documentation improvements.
--
Brice

_______________________________________________
hwloc-announce mailing list
hwloc-announce@lists.open-mpi.org
https://lists.open-mpi.org/mailman/listinfo/hwloc-announce

Reply via email to