4. Variabili di ambiente
Questo capitolo descrive le variabili di ambiente openMP C e C++ (o meccanismi simili specifici della piattaforma) che controllano l'esecuzione di codice parallelo. I nomi delle variabili di ambiente devono essere maiuscoli. I valori assegnati non fanno distinzione tra maiuscole e minuscole e possono avere spazi vuoti iniziali e finali. Le modifiche apportate ai valori dopo l'avvio del programma vengono ignorate.
Le variabili di ambiente sono le seguenti:
- OMP_SCHEDULE imposta il tipo di pianificazione di runtime e le dimensioni del blocco.
- OMP_NUM_THREADS imposta il numero di thread da usare durante l'esecuzione.
- OMP_DYNAMIC abilita o disabilita la regolazione dinamica del numero di thread.
- OMP_NESTED abilita o disabilita il parallelismo annidato.
Gli esempi in questo capitolo illustrano solo il modo in cui queste variabili possono essere impostate negli ambienti della shell C Unix (csh). Nelle shell Korn e negli ambienti DOS le azioni sono simili:
csh:
setenv OMP_SCHEDULE "dynamic"
Ksh:
export OMP_SCHEDULE="dynamic"
DOS:
set OMP_SCHEDULE="dynamic"
4.1 OMP_SCHEDULE
OMP_SCHEDULE
si applica solo alle for
direttive e parallel for
che hanno il tipo di runtime
pianificazione . Il tipo di pianificazione e le dimensioni del blocco per tutti questi cicli possono essere impostati in fase di esecuzione. Impostare questa variabile di ambiente su qualsiasi tipo di pianificazione riconosciuto e su un chunk_size facoltativo.
Per for
le direttive e parallel for
che hanno un tipo di pianificazione diverso da runtime
, OMP_SCHEDULE
viene ignorato. Il valore predefinito per questa variabile di ambiente è definito dall'implementazione. Se la chunk_size facoltativa è impostata, il valore deve essere positivo. Se chunk_size non è impostato, si presuppone un valore pari a 1, tranne quando la pianificazione è static
. Per una static
pianificazione, la dimensione predefinita del blocco viene impostata sullo spazio di iterazione del ciclo diviso per il numero di thread applicati al ciclo.
Esempio:
setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"
Riferimenti incrociati
4.2 OMP_NUM_THREADS
La OMP_NUM_THREADS
variabile di ambiente imposta il numero predefinito di thread da usare durante l'esecuzione. OMP_NUM_THREADS
viene ignorato se tale numero viene modificato in modo esplicito chiamando la routine della omp_set_num_threads
libreria. Viene ignorato anche se è presente una clausola esplicita num_threads
in una parallel
direttiva.
Il valore della OMP_NUM_THREADS
variabile di ambiente deve essere un numero intero positivo. L'effetto dipende dal fatto che la regolazione dinamica del numero di thread sia abilitata. Per un set completo di regole sull'interazione tra la variabile di ambiente e la OMP_NUM_THREADS
regolazione dinamica dei thread, vedere la sezione 2.3.
Il numero di thread da usare è definito dall'implementazione se:
- la
OMP_NUM_THREADS
variabile di ambiente non è specificata, - il valore specificato non è un numero intero positivo o
- il valore è maggiore del numero massimo di thread che il sistema può supportare.
Esempio:
setenv OMP_NUM_THREADS 16
Riferimenti incrociati
4.3 OMP_DYNAMIC
La OMP_DYNAMIC
variabile di ambiente abilita o disabilita la regolazione dinamica del numero di thread disponibili per l'esecuzione di aree parallele. OMP_DYNAMIC
viene ignorato quando la regolazione dinamica è abilitata o disabilitata in modo esplicito chiamando la routine della omp_set_dynamic
libreria. Il valore deve essere TRUE
o FALSE
.
Se OMP_DYNAMIC
è impostato su TRUE
, il numero di thread usati per l'esecuzione di aree parallele può essere regolato dall'ambiente di runtime per usare al meglio le risorse di sistema. Se OMP_DYNAMIC
è impostato su FALSE
, la regolazione dinamica è disabilitata. La condizione predefinita è definita dall'implementazione.
Esempio:
setenv OMP_DYNAMIC TRUE
Riferimenti incrociati
- Aree parallele
- funzione omp_set_dynamic
4.4 OMP_NESTED
La OMP_NESTED
variabile di ambiente abilita o disabilita il parallelismo annidato a meno che il parallelismo annidato non sia abilitato o disabilitato chiamando la routine della omp_set_nested
libreria. Se OMP_NESTED
è impostato su TRUE
, il parallelismo annidato è abilitato. Se OMP_NESTED
è impostato su FALSE
, il parallelismo annidato è disabilitato. Il valore predefinito è FALSE
.
Esempio:
setenv OMP_NESTED TRUE