Udostępnij za pośrednictwem


Konstruowanie 2.3 równoległe

Następujące dyrektywy definiuje równoległych regionu, który jest regionem program, który ma zostać wykonana przez wiele wątków jednocześnie.Jest to konstrukcje podstawowe, który uruchamia proces przetwarzania równoległego.

#pragma omp parallel [clause[ [, ]clause] ...] new-line
   structured-block

Klauzuli jest jedną z następujących czynności:

Jeśli (wyrażenie skalarnej)

prywatne (listy zmiennej)

firstprivate (listy zmiennej)

Default(Shared | None)

udostępnione (listy zmiennej)

copyin (listy zmiennej)

reduction(operator: variable-list**)**

num_threads (wyrażenie całkowite)

Gdy wątek napotyka konstrukcja równolegle, zespołu wątków jest tworzony, jeśli spełniony jest jeden z następujących przypadków:

  • Nie Jeśli klauzuli jest obecny.

  • Jeśli wyrażenie ma wartość różną od zera.

Wątek ten staje się wątek główny zespół, o numerze wątku 0, i wszystkie wątki w zespołu, w tym w głównym wątku wykonywania regionu równolegle.Jeśli wartość Jeśli wyrażenie jest zero, region jest seryjny.

Aby określić liczbę wątków, które są wymagane, będą uznawane następujące zasady w celu.Pierwsza reguła spełniony jest warunek, którego będą stosowane:

  1. Jeśli num_threads klauzuli jest obecny, a następnie wartość wyrażenia całkowitą liczbę wątków, wymagane.

  2. Jeśli omp_set_num_threads została wywołana funkcja biblioteki, a następnie wartość argument w wywołaniu ostatnio wykonane jest liczba wątków wymagane.

  3. Jeśli zmienna środowiskowa OMP_NUM_THREADS jest zdefiniowana, a następnie wartość tej zmiennej środowiskowej jest liczba wątków wymagane.

  4. Jeśli żadna z powyższych metod wykorzystano liczbę wątków, wymagane jest zdefiniowane w implementacji.

Jeśli num_threads klauzuli jest obecny, a następnie zastępuje ona liczbę wątków, wymagane przez omp_set_num_threads funkcji biblioteki lub OMP_NUM_THREADS zmienna środowiskowa tylko dla regionu równolegle, jest ono stosowane do.Kolejne równoległych regionów nie dotyczy go.

Liczba wątków wykonujących równoległych regionu zależy również czy też nie włączeniu dynamicznego dostosowanie liczby wątków.Jeśli dostosowanie dynamiczne jest wyłączone, żądana liczba wątków będzie wykonywał równoległych regionu.Po włączeniu dynamicznego dostosowania żądana liczba wątków jest maksymalną liczbę wątków, które mogą wykonywać równolegle regionu.

Równoległe regionu jest napotkał dynamiczne dostosowanie liczby wątków jest wyłączona i liczbę wątków, wymagane dla regionu równoległych przekracza liczbę, która może dostarczyć system run-time, zachowanie programu jest zdefiniowane w implementacji.Implementacja może na przykład przerwań wykonywanie programu, lub może go serializować równoległych regionu.

Omp_set_dynamic funkcji biblioteki i OMP_DYNAMIC zmiennej środowiskowej może służyć do włączania i wyłączania dynamiczne dostosowanie liczby wątków.

Liczba procesorów fizycznych faktycznie obsługującego wątki w danym momencie jest zdefiniowane w implementacji.Po utworzeniu, na czas trwania tego regionu równoległych pozostaje stała liczba wątków w zespole.Można zmienić, jawnie przez użytkownika lub automatycznie przez system run-time z jednego regionu równolegle do innego.

Oświadczeń zawartych w ramach dynamicznego zakresu równoległych regionu są wykonywane przez każdego wątku, a każdy wątek może wykonywać ścieżkę instrukcji, która różni się od innych wątków.Napotkano poza zakres leksykalne równoległych regionu dyrektyw są nazywane osierocone dyrektyw.

Istnieje dorozumianych bariery, na końcu równoległych regionu.Wątek główny zespołu nadal wykonanie na końcu równoległych regionu.

Jeśli wątek w zespole regionu równoległe wykonywanie napotka innej konstrukcji równolegle, tworzy nowy zespół i staje się wzorcem tego nowego zespołu.Zagnieżdżone regiony równoległe są domyślnie szeregowane.W efekcie domyślnie zagnieżdżonego regionu równoległego jest wykonywany przez zespół złożony z jednego wątku.Zachowanie domyślne mogą być zmieniane przy użyciu albo funkcji biblioteki runtime omp_set_nested lub zmienna środowiskowa OMP_NESTED.Jednakże liczba wątków w zespole zagnieżdżonego regionu równoległe wykonywanie jest zdefiniowane w implementacji.

Ograniczenia do równolegle dyrektywy są w następujący sposób:

  • Co najwyżej jeden Jeśli klauzula może być wyświetlana na tej dyrektywy.

  • Nieokreślony jest to czy dowolne side skutki wewnątrz jeżeli wyrażenie lub num_threads występować wyrażenie.

  • A throw wykonywane wewnątrz regionu równoległych musi spowodować wznowienie w ramach dynamicznego zakresu tego samego bloku structured wykonywania i muszą być złowione przez tego samego wątku, który wygenerował wyjątek.

  • Tylko jeden num_threads klauzula może być wyświetlana na tej dyrektywy.Num_threads wyrażenie jest oceniane poza kontekstem równoległych regionu i musi być dodatnią liczbą całkowitą.

  • Kolejność oceny Jeśli i num_threads klauzul jest nieokreślony.

Odsyłacze:

  • prywatne, firstprivate, domyślną, udostępnionego, copyin, i redukcji klauzule, zobacz ppkt 2.7.2 na stronie 25.

  • OMP_NUM_THREADS zmiennej środowiskowej, ppkt 4.2 na stronie 48.

  • omp_set_dynamic funkcji biblioteki, zobacz ppkt 3.1.7 na stronie 39.

  • OMP_DYNAMIC środowiska zmiennej, zobacz sekcji 4.3 na stronie 49.

  • omp_set_nested działać, zobacz ppkt 3.1.9 na stronie 40.

  • OMP_NESTED środowiska zmiennej, zobacz sekcji 4.4 na stronie 49.

  • omp_set_num_threads funkcji biblioteki, zobacz sekcja 3.1.1 na stronie 36.