Language Directives ******************* This chapter describes the OmpSs-2 language, this is, all the necessary elements to understand how an OmpSs-2 application executes and/or behaves in a parallel architecture. OmpSs-2 provides a simple path for users already familiarized with the OpenMP programming model to easily write (or port) their programs to OmpSs-2. This description is completely guided by the list of OmpSs-2 directives. In each of the following sections we will find a short description of the directive, its specific syntax, the list of clauses (including the list of valid parameters for each clause and a short description for them). In addition, each section finalizes with a simple example showing how this directive can be used in a valid OmpSs-2 program. As is the case of OpenMP in C and C++, OmpSs-2 directives are specified using the `#pragma` mechanism (provided by the base language) and in Fortran they are specified using special comments that are identified by a unique sentinel. The sentinel used in OmpSs-2 is `oss`. Compilers will typically ignore OmpSs-2 directives if support is disabled or not provided. .. highlight:: c C/C++ format:: #pragma oss directive-name [clause[ [,] clause] ... ] new-line Fortran format:: sentinel directive-name [clause[ [,] clause]...] Where depend on Fortran fixed/free form: * The sentinels for *fixed form* can be: ``!$oss``, ``c$oss`` or ``*$oss``. Sentinels must start in column 1. Continued directive line must have a character other than a space or a zero in column 6. * The sentinel for *free form* must be ``!$oss``. This sentinel can appear in any column as long as is not preceeded by any character different than space. Continued directive line must have an ampersand (&). .. include:: task.rst .. include:: target.rst .. include:: loop.rst .. include:: taskwait.rst .. include:: release.rst .. include:: taskyield.rst .. include:: atomic.rst .. include:: critical.rst .. include:: declare_reduction.rst .. include:: assert.rst .. include:: restrictions.rst