The Hardware Locality (hwloc) team is pleased to announce the first beta release for 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 * 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! See https://github.com/open-mpi/hwloc/wiki/Upgrading-to-v2.0-API 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 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 https://github.com/open-mpi/hwloc/wiki/Upgrading-to-v2.0-API * 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 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. + 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(), hwloc_distribute[v](). + 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 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 + 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 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. + 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. + Remove the dependency on libnuma on Linux. + hwloc now requires a C99 compliant compiler. -- Brice _______________________________________________ hwloc-announce mailing list hwloc-announce@lists.open-mpi.org https://lists.open-mpi.org/mailman/listinfo/hwloc-announce