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