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 runtime
harmonogramu . 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
- dla dyrektywy
- równoległe dla dyrektywy
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
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
- Regiony równoległe
- omp_set_dynamic, funkcja
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