directiva alineado 2.6.5
La directiva de vaciado , es explícito o implícito, especifica un punto de secuencia de “entre subprocesos” en el que la implementación es necesario asegurarse de que todos los subprocesos de un equipo tengan una vista coherente de algunos objetos (especificados abajo) en memoria.Esto significa que las evaluaciones anteriores de expresiones que hagan referencia a esos objetos está completa y las evaluaciones subsiguientes aún no se han iniciado.Por ejemplo, los compiladores deben restablecer los valores de los objetos de los registros en memoria, y el hardware puede necesitar vaciar los búferes de escritura a la memoria y cargar los valores de los objetos de memoria.
La sintaxis de la directiva de vacío es la siguiente:
#pragma omp flush [(variable-list)] new-line
Si los objetos que requieren sincronización se todos pueden designar por variables, después estas variables se pueden especificar en la variable-listaopcional.Si un puntero está presente en la variable-lista, se vacía el propio puntero, no el objeto que el puntero se hace referencia.
Una directiva de vaciado sin una variable-lista sincroniza todos los objetos compartidos excepto objetos inaccesibles con la duración automática de almacenamiento.(Esto es probable tener mayor sobrecarga que vaciado con una variable-lista.) Una directiva de vaciado sin una variable-lista es implícita para las siguientes directivas:
barrier
en la entrada a y la salida de Crtico
en la entrada a y la salida de ordered
en la entrada a y la salida de Paralelo
en la salida de Para
en la salida de secciones
en la salida de solo
en la entrada a y la salida de paralelo para
en la entrada a y la salida de secciones paralelas
La directiva no es implícita si una cláusula de nowait está presente.Tenga en cuenta que la directiva de vaciado no es implícito para cualquiera de los siguientes:
en la entrada a Para
en la entrada a o la salida de principal
en la entrada a secciones
en la entrada a solo
Una referencia que tiene acceso al valor de un objeto con un tipo volátil-calificado se comporta como si se vaciado de directivas especificando ese objeto en el punto de secuencia anterior.Una referencia que modifique el valor de un objeto con un tipo volátil-calificado se comporta como si se vaciado de directivas especificando ese objeto en el punto de secuencia subsiguiente.
Dado que la directiva de vaciado no tiene instrucciones de lenguaje de C/C++. como parte de la sintaxis, hay algunas restricciones en su posición dentro de un programa.Vea Apéndice C para la gramática formal.El ejemplo siguiente muestra estas restricciones.
/* ERROR - The flush directive cannot be the immediate
* substatement of an if statement.
*/
if (x!=0)
#pragma omp flush (x)
...
/* OK - The flush directive is enclosed in a
* compound statement
*/
if (x!=0) {
#pragma omp flush (x)
}
Restricciones de la directiva de vaciado son los siguientes:
- La variable especificada en una directiva de vaciado no debe tener un tipo de referencia.