Una directiva OpenMP se aplica a siguiente bloque estructurado o a una construcción OpenMP.
Un bloque estructurado es una declaración simple o una sentencia compuesta con una sola entrada en la parte superior y una sola salida en la parte inferior.
La directiva parallel forma un equipo de hebras y inicia la ejecución paralela.
#pragma omp parallel [clause[ [, ]clause] ...] new-line structured-block
En la creación del bucle se especifica que las iteraciones se distribuirán y ejecutaran por un equipo de hebras.
#pragma omp for [clause[[,] clause] ... ] new-line for-loops
La construcción sections tiene un conjunto de bloques que tienen que ser distribuidos y ejecutados por un equipo de hebras.
#pragma omp sections [clause[[,] clause] ...] new-line { [#pragma omp section new-line] structured-block [#pragma omp section new-line structured-block ] ... }
La construcción single especifica que el bloque asociado ha de ser ejecutado por una sola hebra del equipo (no necesariamente la hebra master), en el marco de su función implícita.
#pragma omp single [clause[[,] clause] ...] new-line structured-block
La combinación de la construcción parallel con la especificación de la construcción (for/sections), comparten trabajo teniendo una sola declaración.
La unión de la clausulas permite la creación de hebras a la vez de especificar la estructura paralela.
#pragma omp parallel for [clause[[,] clause] ...] new-line for-loop #pragma omp parallel sections [clause[ [, ]clause] ...] new-line { [#pragma omp section new-line] structured-block [#pragma omp section new-line structured-block ] ... }
La construcción task define explicitamente una tarea. El entorno de datos de la tarea se crea de acuerdo a las cláusulas de intercambio de datos y no se aplica por defecto.
#pragma omp task [clause[ [, ]clause] ...] new-line structured-block
La construcción master de un bloque estructurado especifica que es ejecutada por la hebra principal del equipo (master).
No implica sincronizacion ni a la entrada ni a la salida.
#pragma omp master new-line structured-block
La construcción critital restringe la ejecución asociada al bloque por una sola hebra al mismo tiempo.
#pragma omp critical [(name)] new-line structured-block
La contrucción barrier especifica de forma explicita un punto de sincronización para todas las hebras.
#pragma omp barrier new-line
La construcción de taskwait especifica que esperar a la finalización de tareas secundarias generadas desde el inicio de la tarea actual.
#pragma omp taskwait newline
La construcción atomic asegura que un lugar de almacenamiento específico se actualiza automáticamente, expone a la posibilidad de múltiples y simultáneas escrituras.
#pragma omp atomic new-line expression-stmt expression-stmt: one of the following forms: x binop = expr x++ ++x x-- --x
La contruccion flush ejecuta la operación flush de OpenMP, la cual crea una hebra temporal con una vista consistente de la memoria y fuerza un orden para las operaciones de memoria sobre las variables.
The flush construct executes the OpenMP flush operation, which makes a thread’s temporary view of memory consistent with memory, and enforces an order on the memory operations of the variables.
#pragma omp flush [(list)] new-line
La contruccion ordered especifica que un bloque dentro de una region de bucle se ejecutara en el orden especificado por las iteraciones del bucle.
El orden de ejecución paralela seria equivalente a una ejecución secuencial.
#pragma omp ordered new-line structured-block
La contrucción threadprivate especifica las variables se replican, teniendo cada hebra una copia
#pragma omp threadprivate(list) new-line