4. Zmienne środowiskowe

W tym rozdziale opisano zmienne środowiskowe interfejsu API OpenMP C i C++ (lub podobne mechanizmy specyficzne dla platformy), które kontrolują wykonywanie kodu równoległego. Nazwy zmiennych środowiskowych muszą mieć wielkie litery. Wartości przypisane do nich są bez uwzględniania wielkości liter i mogą mieć wiodące i końcowe białe znaki. Modyfikacje wartości po uruchomieniu programu są ignorowane.

Zmienne środowiskowe są następujące:

  • OMP_SCHEDULE ustawia typ harmonogramu czasu wykonywania i rozmiar fragmentu.
  • OMP_NUM_THREADS ustawia liczbę wątków do użycia podczas wykonywania.
  • OMP_DYNAMIC włącza lub wyłącza dynamiczną korektę liczby wątków.
  • OMP_NESTED włącza lub wyłącza zagnieżdżone równoległości.

W przykładach w tym rozdziale pokazano tylko, jak te zmienne można ustawić w środowiskach powłoki C systemu Unix (csh). W środowiskach korn shell i DOS akcje są podobne:

csh:
setenv OMP_SCHEDULE "dynamic"

Ksh:
export OMP_SCHEDULE="dynamic"

DOS:
set OMP_SCHEDULE="dynamic"

4.1 OMP_SCHEDULE

OMP_SCHEDULE dotyczy tylko for dyrektyw i parallel for , które mają typ runtimeharmonogramu . Typ harmonogramu i rozmiar fragmentu dla wszystkich takich pętli można ustawić w czasie wykonywania. Ustaw tę zmienną środowiskową na dowolny rozpoznany typ harmonogramu i na opcjonalny chunk_size.

W przypadku for dyrektyw i parallel for , które mają typ harmonogramu inny niż runtime, OMP_SCHEDULE jest ignorowany. Wartość domyślna dla tej zmiennej środowiskowej jest zdefiniowana przez implementację. Jeśli ustawiono opcjonalną chunk_size , wartość musi być dodatnia. Jeśli chunk_size nie jest ustawiona, przyjmuje się, że przyjmuje się wartość 1, z wyjątkiem sytuacji, gdy harmonogram to static. W przypadku static harmonogramu domyślny rozmiar fragmentu jest ustawiony na przestrzeń iteracji pętli podzieloną przez liczbę wątków zastosowanych do pętli.

Przykład:

setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"

Odwołania krzyżowe

4.2 OMP_NUM_THREADS

Zmienna OMP_NUM_THREADS środowiskowa ustawia domyślną liczbę wątków do użycia podczas wykonywania. OMP_NUM_THREADS parametr jest ignorowany, jeśli ta liczba zostanie jawnie zmieniona przez wywołanie omp_set_num_threads procedury biblioteki. Jest on również ignorowany, jeśli istnieje jawna num_threads klauzula parallel dyrektywy.

Wartość zmiennej środowiskowej OMP_NUM_THREADS musi być dodatnią liczbą całkowitą. Jego efekt zależy od tego, czy jest włączona dynamiczna korekta liczby wątków. Aby uzyskać kompleksowy zestaw reguł dotyczących interakcji między OMP_NUM_THREADS zmienną środowiskową a dynamiczną korektą wątków, zobacz sekcję 2.3.

Liczba wątków do użycia jest zdefiniowana przez implementację, jeśli:

  • nie określono zmiennej OMP_NUM_THREADS środowiskowej,
  • określona wartość nie jest dodatnią liczbą całkowitą lub
  • wartość jest większa niż maksymalna liczba wątków, które system może obsługiwać.

Przykład:

setenv OMP_NUM_THREADS 16

Odwołania krzyżowe

  • num_threads, klauzula
  • omp_set_num_threads, funkcja
  • omp_set_dynamic, funkcja

4.3 OMP_DYNAMIC

Zmienna OMP_DYNAMIC środowiskowa włącza lub wyłącza dynamiczną korektę liczby wątków dostępnych do wykonywania regionów równoległych. OMP_DYNAMIC jest ignorowany, gdy dynamiczne dostosowanie jest jawnie włączone lub wyłączone przez wywołanie omp_set_dynamic procedury biblioteki. Jego wartość musi mieć TRUE wartość lub FALSE.

Jeśli OMP_DYNAMIC ustawiono wartość TRUE, liczba wątków używanych do wykonywania regionów równoległych może zostać dostosowana przez środowisko uruchomieniowe w celu najlepszego użycia zasobów systemowych. Jeśli OMP_DYNAMIC ustawiono wartość FALSE, korekta dynamiczna jest wyłączona. Domyślny warunek jest zdefiniowany przez implementację.

Przykład:

setenv OMP_DYNAMIC TRUE

Odwołania krzyżowe

4.4 OMP_NESTED

Zmienna OMP_NESTED środowiskowa włącza lub wyłącza zagnieżdżony równoległość, chyba że zagnieżdżona równoległość jest włączona lub wyłączona przez wywołanie omp_set_nested procedury biblioteki. Jeśli OMP_NESTED ustawiono wartość TRUE, włączono zagnieżdżonych równoległości. Jeśli OMP_NESTED ustawiono wartość FALSE, zagnieżdżona równoległość jest wyłączona. Domyślna wartość to FALSE.

Przykład:

setenv OMP_NESTED TRUE

Odsyłacz

  • omp_set_nested, funkcja