Section: Software
Hardware Locality
Participants : Jérôme Clet-Ortega, Brice Goglin, Samuel Thibault.
Hardware Locality (hwloc ) is a library and set of tools aiming at discovering and exposing the topology of machines, including processors, cores, threads, shared caches and NUMA memory nodes. It builds a widely-portable abstraction of these resources and exposes it to the application so as to help them adapt their behavior to the hardware characteristics. It targets many types of high-performance computing applications [25] , from thread scheduling (it is already used by the Marcel multithreading library and ForestGOMP OpenMP runtime system) to placement of MPI processes (the Open MPI and MPICH2 libraries are also being ported on top of it).
hwloc was initially developed inside the Marcel library as a way to discover the hardware processor topology and place threads according to their affinities. The democratization of multicore processors in HPC raised the need to offer such hardware discovery and placing abilities to more than just the Marcel library. The code was thus extracted out of Marcel and made self-consistent as the libtopology project. Due to similar goals, it was then merged with the Portable Linux Processor Affinity library (PLPA) as hwloc . PLPA brought a lot of users thanks to its integration in Open MPI (Before being merged with libtopology as hwloc , PLPA was distributed as an Open MPI sub-project at http://www.openmpi.org .) while libtopology brought a much more flexible interface, an advanced knowledge of the hardware, and more portability.
hwloc is now developed in collaboration with Open MPI which now hosts the project. The core development is still mostly performed by Brice Goglin and Samuel Thibault from the Runtime team-project, but many outside contributors are joining the effort, especially from the Open MPI and MPICH2 communities. hwloc is composed of 11 000 lines of C. It is distributed under the terms of the BSD License at the following URL: http://www.open-mpi.org/projects/hwloc/