Udostępnij za pośrednictwem


2.6.5 flush dyrektywy

Opróżnić dyrektywy, czy wyraźnej lub dorozumianej, określa punkt sekwencji "cross wątku", przy której wykonania ma obowiązek zapewnić, że wszystkie wątki w zespole mają jednolity widok niektóre obiekty (patrz niżej) w pamięci.Oznacza to, że poprzednich ocen wyrażenia odwołujące się do tych obiektów są kompletne, a kolejne oceny nie rozpoczęły jeszcze.Na przykład kompilatory należy przywrócić wartości obiektów z rejestrów do pamięci i sprzęt może być konieczne opróżnienia buforów zapisu do pamięci i ponowne załadowanie wartości obiektów z pamięci.

Składnia opróżnić dyrektywy jest następująca:

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

Jeśli obiekty, które wymagają synchronizacji można wszystkie oznaczone zmiennych, a następnie te zmienne można określić w opcjonalnej listy zmiennej.Jeśli kursor znajduje się w listy zmiennej, sam wskaźnik jest opróżniany, nie obiekt wskaźnik odnosi się do.

A opróżnić dyrektywa, bez listy zmiennej synchronizuje wszystkich udostępnionych obiektów z wyjątkiem obiektów niedostępne z czasem trwania składowania automatyczne.(Jest to prawdopodobnie mają większe obciążenie niż z opróżnić z listy zmiennej.) A opróżnić dyrektywa, bez listy zmiennej jest implikowana w następujących dyrektywach:

  • barrier

  • U wejścia do i wyjścia z krytyczny

  • U wejścia do i wyjścia zordered

  • U wejścia do i wyjścia z równoległe

  • Na wyjściu z dla

  • Na wyjściu z sekcji

  • Na wyjściu z pojedynczy

  • U wejścia do i wyjścia z równolegle do

  • U wejścia do i wyjścia z sekcje równoległe

Niniejszej dyrektywy nie jest wprost, jeśli nowait klauzuli jest obecny.Należy zauważyć, że opróżnić dyrektywy nie jest implikowana dla dowolnego z następujących czynności:

  • U wejścia do dla

  • U wejścia do lub wyjścia z wzorca

  • U wejścia do sekcji

  • U wejścia do pojedynczy

Odwołanie, który uzyskuje dostęp do wartości obiektu typu kwalifikowana lotnych zachowuje się tak, jakby były opróżnić dyrektywy, określając tego obiektu w poprzednim punkcie sekwencji.Odniesienia, która modyfikuje wartość obiektu typu kwalifikowana lotnych zachowuje się tak, jakby były opróżnić dyrektywy, określając ten obiekt w punkcie kolejnych sekwencji.

Należy zauważyć, że ponieważ opróżnić dyrektywa nie ma instrukcji języka C, jako część jego składni, istnieją pewne ograniczenia dotyczące jego położenie w programie.Zobacz Dodatku C formalne gramatyki.Poniższy przykład ilustruje te ograniczenia.

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

Ograniczenia do opróżnić dyrektywy są w następujący sposób:

  • Zmienna, określona w opróżnić dyrektywa nie musi mieć typ odwołania.