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.