4. NODES Runtime Options

This section describes how to run OmpSs-2 applications using NODES, and which runtime options are available.

4.1. Executing and controlling number of CPUs

NODES applications can be compiled and executed in this way:

# Compile OmpSs-2 program with LLVM/Clang
$ clang -fompss-2=libnodes app.c -o app

# Execute on all available cores of the current session
$ ./app

The number of cores that are used is controlled by running the application through the taskset command. For instance:

# Execute on cores 0, 1, 2 and 4
$ taskset -c 0-2,4 ./app

4.2. Debugging

By default, NODES is optimized to execute applications as efficiently as possible in terms of performance, and will assume that the application code is correct. Thus, it will not perform most runtime validity checks. To enable validity checks, users must compile NODES enabling debug options, by passing the --enable-debug flag at configure time. This will enable many internal validity checks that may be violated when the application code is incorrect.

To debug an application with a regular debugger, please compile its code with the regular debugging flags.

4.3. Generating ovni traces

NODES can generate execution traces with the ovni library, which generates lightweight binary traces, and it is possible to mix ovni-instrumented libraries together with an OmpSs-2 program and obtain a single coherent trace.

To enable the generation of ovni traces, NODES must be configured with the --with-ovni option. Once NODES has been built with ovni support, it is up to the user to enable it, as it is disabled by default. To enable ovni instrumentation, the NODES_OVNI environment variable must be set as follows: export NODES_OVNI=1.

The trace will be left in the ovni/ directory, which can be transformed into a Paraver trace with the ovniemu utility. The Paraver configuration files (views) can be found in the ovni/cfg directory.

See the ovni documentation for more details.