nOS-V is a runtime library that implements the nOS-V tasking API, developed by the Programming Models group at the Barcelona Supercomputing Center.
Its main goal is to provide a low-level and low-overhead tasking runtime which supports co-execution and can be leveraged by higher-level programming models.
The nOS-V Library is Free Software, licensed under the clauses of the GNU GPL v3 License included in the COPYING file. The copyright of the files included in this package belongs to the Barcelona Supercomputing Center, unless otherwise stated.
The following software is required to build and install nOS-V:
- automake, autoconf, libtool, pkg-config, make and a C11 compiler
- numactl
The following software is required to enable optional features:
- ovni to generate execution traces for performance analysis with Paraver
- PAPI for gathering performance counters (version >= 5.6.0)
When cloning from a repository, the building environment must be prepared through the following command:
$ autoreconf -f -i -v
When the code is distributed through a tarball, it usually does not need that command.
Then execute the following commands:
$ ./configure --prefix=INSTALLATION_PREFIX ...other options...
$ make all check
$ make install
where INSTALLATION_PREFIX
is the directory into which to install nOS-V.
The configure script accepts several options:
--enable-debug
: Add compiler debug flags and enable additional internal debugging mechanisms--enable-asan
: Add compiler flags to enable address sanitizing--with-ovni
: Enable ovni instrumentation and specify the ovni library installation prefix--with-papi
: Enable PAPI counters and specify the PAPI library installation prefix--with-libnuma
: Specify the numactl library installation prefix
nOS-V must come first in the Lookup Scope of the executable. This is needed because nOS-V provides a number of interceptor functions. To do so, if you link nOS-V directly to your executable, link nOS-V before any other shared library. If linking nOS-V in a shared library, you will either need to link nOS-V again in your main executable or preload nOS-V using the LD_PRELOAD
environment variable.
Link-time example:
### wrong
$ gcc main.c -lmylib -lnosv
### correct
$ gcc main.c -lnosv -lmylib
Run-time example:
$ LD_PRELOAD=<nosv_install_path>/lib/libnosv.so ./main
The user documentation for nOS-V can be found here
The development of nOS-V is based on a few simple principles that are maintained throughout the library:
- No dependencies, aside from libc and pthreads
- C11 with K&R C indentation. There is a ".clang-format" file provided
- Simple is better. Stablishing compile-time limits is encouraged if it simplifies significantly the code
If you use nOS-V in your research, we ask that you cite the following article pending publication:
@misc{alvarez2022nosv,
title={nOS-V: Co-Executing HPC Applications Using System-Wide Task Scheduling},
booktitle={2024 IEEE International Parallel and Distributed Processing Symposium},
author={David Álvarez and Kevin Sala and Vicenç Beltran},
year={2024},
note={Accepted, to be published}
}