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

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
* API changes to cleanup bad ideas from 8 years ago

This is still a "beta" and not a "release candidate" yet because some
minor/user-invisible changes are still expected in the next month.

However you are strongly encouraged to
** try porting your code to this beta as soon as possible **
and report any issue about the new API.
We can still change the API until the final 2.0 is released.
But we cannot break it later!

for details about API changes.
Version 2.0.0
*** The ABI of the library has changed. ***
  For instance some hwloc_obj fields were reordered, added or removed, see 
  + HWLOC_API_VERSION and hwloc_get_api_version() now give 0x00020000.
  + See "How do I handle ABI breaks and API upgrades ?" in the FAQ
* 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.
  + 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 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 
      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 
        entire levels (so that topology do not become too asymmetric).
    - Remove HWLOC_TOPOLOGY_FLAG_ICACHES in favor of 
      hwloc_topology_set_io_types_filter() with HWLOC_TYPE_FILTER_KEEP_ALL or
  + 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 
    - 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 
  + 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_restrict() doesn't remove objects that contain memory
    by default anymore.
    - The list of existing restrict flags was modified.
  + 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.
* 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(),
  + Remove Kerrighed support from the Linux backend.
  + Remove Tru64 (OSF/1) support.
    - Remove HWLOC_MEMBIND_REPLICATE which wasn't available anywhere else.
* Tools
  + lstopo and hwloc-info have a new --filter option matching the new filtering 
  + 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
  + About Objects
    - Linux OS devices do not have to be attached through PCI anymore,
      for instance enabling the discovery of NVDIMM block devices.
    - Add a SectorSize attribute to block OS devices on Linux.
    - MemoryModule objects are not added by default because Misc objects are
      filtered-out by default.
    - Do not set PCI devices and bridges name automatically. Vendor and device
      names are already in info attributes.
  + Exports
    - Exporting to synthetic now ignores I/O and Misc objects.
  + PCI discovery
    - Separate OS device discovery from PCI discovery. Only the latter is 
      with --disable-pci at configure time. Both may be disabled with 
    - 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 
      with a single HWLOC_PCI_LOCALITY where bus ranges may be specified.
  + 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 
    - HWLOC_COMPONENTS takes precedence over other environment variables
      for selecting components.
  + Remove the dependency on libnuma on Linux.
  + hwloc now requires a C99 compliant compiler.


hwloc-announce mailing list

Reply via email to