Installation of NODES

The NODES (short for nOS-V based OmpSs-2 DEpendency System) runtime is a library designed to work on top of the nOS-V runtime. It includes most of the functionalities from its predecessor, Nanos6, whilst leaving the interaction with the system to nOS-V. NODES implements the OmpSs-2 parallel programming model, developed by the Programming Models group at the Barcelona Supercomputing Center.

NODES can be obtained from the GitHub public repository or by contacting us at pm-tools@bsc.es.

Build requirements

The following software is required to build and install NODES:

  1. automake, autoconf, libtool, pkg-config, make and a C and C++17 compiler

  2. boost >= 1.71

  3. nOS-V

Optional libraries and tools

The following software is required to enable additional optional features:

  • ovni (>= 1.5.0) to instrument and generate execution traces for offline performance analysis with Paraver

  • A C++20 compiler to enable further functionalities

Build procedure

NODES uses the standard GNU automake and libtool toolchain. When cloning from a repository, the building environment must be prepared through the command below. When the code is distributed through a tarball, it usually does not need that command.

$ autoreconf -fiv

Then execute the following commands:

$ ./configure --prefix=$INSTALLATION_PREFIX ...other options...
$ make
$ make install

where $INSTALLATION_PREFIX is the directory into which to install NODES.

The configure script accepts the following options:

  • --with-nosv=prefix to specify the prefix of the nOS-V installation

  • --with-boost=prefix to specify the prefix of the Boost installation

  • --with-ovni=prefix to specify the prefix of the ovni installation

  • --with-nodes-clang=prefix to specify the prefix of the LLVM/Clang installation that supports OmpSs-2

Optionally, passing a valid LLVM/Clang installation when configuring enables executing the NODES tests by running:

$ make check

Coroutine support

NODES supports the use of Coroutines provided that a compiler with C++20 support is used. To compile with Coroutine support, the -fcoroutines flag must be passed, as shown in the example below:

$ clang++ -std=c++20 -fcoroutines -o test-coroutines.bin test-coroutines.cpp

For more detailed examples on the usage of Coroutines, check our correctness tests in the tests/correctness/coroutine subdirectory of the NODES source code.

Known limitations

NODES supports most of the features found in the Nanos6 runtime. However, at the moment, it does not support the following:

  • Linear-region dependency system

  • Assert directive

Furthermore, the instrumentation provided differs in the sense that it only provides (1) entry-exit points instrumentation, and (2) instrumentation related to the dependency system. Thus, instrumentation variants such as profile, graph, and the linter (lint) are not available in NODES.