Sdílet prostřednictvím


2.6.5 vyprázdnění směrnice

Flush směrnice, výslovné nebo mlčky určuje posloupnost "mezi podprocesy" bod používá provádění všechny podprocesy v týmu zajistit konzistentní zobrazení některých objektů (níže), v paměti.To znamená, že předchozí hodnocení výrazy, které odkazují na tyto objekty jsou kompletní a následné hodnocení ještě nezačaly.Kompilátory musí obnovit hodnoty objektů z registrů do paměti a hardware může potřebovat vyprázdnění vyrovnávací paměti pro zápis do paměti a znovu načíst hodnoty objektů z paměti.

Syntaxe flush směrnice je následující:

#pragma omp flush [(variable-list)]  new-line

Pokud objekty, které vyžadují synchronizaci můžete všechny označí proměnné, pak tyto proměnné lze zadat v nepovinné seznamu proměnné.Pokud je ukazatel v seznamu proměnné, ukazatel sám vyprázdněn, není objekt odkazuje ukazatel.

A flush směrnice bez seznamu proměnné synchronizuje všechny sdílené objekty, s výjimkou nepřístupné objekty s dobou trvání automatického ukládání.(Toto je pravděpodobně další režii než flush s seznamu proměnné.) A flush směrnice bez seznamu proměnné je zahrnuto následujících směrnic:

  • barrier

  • Na vstupu a výstupu z kritický

  • Na vstupu a výstupu zordered

  • Na vstupu a výstupu z paralelní

  • Opuštění at pro

  • Opuštění at oddíly

  • Opuštění at jeden

  • Na vstupu a výstupu z pro paralelní

  • Na vstupu a výstupu z paralelní sekce

Pokud není implikován směrnice nowait je přítomna klauzule.Je třeba poznamenat, že flush směrnice není implikován pro následující:

  • Vstup pro

  • Položka nebo výstupu z předlohy

  • Vstup oddíly

  • Vstup jeden

Odkaz na hodnotu objekt typu volatile kvalifikované přistupuje chová, jako kdyby vyprázdnění směrnice určující předchozí sekvence bodu objektu.Odkaz na hodnotu objekt typu volatile kvalifikované chová, jako kdyby flush směrnice zadání následující sekvence bodu objektu.

Všimněte si, že protože flush směrnice nemá prohlášení jako součást jeho syntaxi jazyka C, existují určitá omezení na jeho umístění v programu.Viz Dodatku C pro formální gramatiky.Následující příklad ilustruje těchto omezení.

/* 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)
}

Omezení flush směrnice jsou následující:

  • Proměnné uvedené v flush směrnice nesmí mít typ odkazu.