# 3. Running OmpSs Programs¶

Nanos++ is an extensible runtime library designed to serve as a runtime support in parallel environments. It is mainly used to support OmpSs (an extension to the OpenMP programming model) developed at BSC. Nanos++ also has modules to support OpenMP and Chapel.

With Nanox++ also comes a small application offering a quick help about the runtime common options. It lists the available configuration options and modules. For each module also lists all configuration flags available. This application is installed in the NANOX_INSTALL_DIR/bin directory and it is called ‘nanox’. It accepts several command line options:

 --help Shows command line and environment variables available. --list-modules Shows the modules that are available with the current installation of Nanos++. --version Shows the installed version of Nanos++ and the configure command line used to install it.

Some parts of the runtime come in the form of modules that are loaded on demand when the library is initialized. Each module can have its own particular options which can be set using also command-line parameters. In order to see the list of available modules and options use the nanox tool. As in the case of the runtime options you can also choose among all available plugins using a environment variable (or the equivalent command-line option like using NX_ARGS).

## 3.1. Runtime Options¶

Nanos++ has different configuration options which can be set through environment variables. These runtime parameters can be also passed as a command-line option like through the environment variable NX_ARGS. For example, these two invocations of a Nanos++ application are equivalent:

$export NX_FANCY_OPTION=whatever$./myProgram

$export NX_ARGS='--fancy-option=whatever'$ ./myProgram


## 3.2. Running on Specific Architectures¶

The specific information related to the different architectures supported by OmpSs is explained here.

## 3.3. Runtime Modules (plug-ins)¶

As the main purpose of Nanos++ is to be used in research of parallel programming environments it has been designed to be extensible by means of plugins. Runtime plugins can be selected for each execution using the proper runtime option (e.g. NX_SCHEDULE=cilk). These are:

## 3.4. Extra Modules (plug-ins)¶

Plugins are also used in some other library modules. This allows to implement several versions for the same algorithm and also offers an abstraction layer to access them. These extra plugins modules are:

• Slicers: tasks that can be eventually divided in more tasks.
• Worksharings: a list of work items which can be executed in parallel without creating a new task (e.g. in loops, a chunk of iterations will be a work item).

These plug-ins can be set in user source code using the proper OmpSs mechanism. Slicers implement task generating loops constructs (i.e. an OmpSs loop construct). Worksharing implement work distribution among the team of threads encountering the construct (e.g. OpenMP loop constructs).