E. Comportamenti definiti dall'implementazione in OpenMP C/C++
Questa appendice riepiloga i comportamenti descritti come "implementazione definita" in questa API. A ogni comportamento viene fatto riferimento incrociato alla relativa descrizione nella specifica principale.
Osservazioni:
Un'implementazione è necessaria per definire e documentarne il comportamento in questi casi, ma questo elenco potrebbe essere incompleto.
Numero di thread: se viene rilevata un'area parallela durante la regolazione dinamica del numero di thread disabilitati e il numero di thread richiesti per l'area parallela è maggiore del numero che il sistema di runtime può fornire, il comportamento del programma è definito dall'implementazione (vedere la pagina 9).
In Visual C++, per un'area parallela non annidata, verranno forniti 64 thread (il massimo).
Numero di processori: il numero di processori fisici che ospitano effettivamente i thread in un determinato momento è definito dall'implementazione (vedere la pagina 10).
In Visual C++ questo numero non è costante ed è controllato dal sistema operativo.
Creazione di team di thread: il numero di thread in un team che esegue un'area parallela nidificata è definito dall'implementazione (vedere la pagina 10).
In Visual C++ questo numero è determinato dal sistema operativo.
schedule(runtime): la decisione sulla pianificazione viene posticipata fino all'ora di esecuzione. Il tipo di pianificazione e le dimensioni del blocco possono essere scelti in fase di esecuzione impostando la
OMP_SCHEDULE
variabile di ambiente. Se questa variabile di ambiente non è impostata, la pianificazione risultante è definita dall'implementazione (vedere la pagina 13).In Visual C++, il tipo di pianificazione non ha
static
dimensioni di blocco.Pianificazione predefinita: in assenza della clausola schedule, la pianificazione predefinita è definita dall'implementazione (vedere la pagina 13).
In Visual C++, il tipo di pianificazione predefinito non ha
static
dimensioni di blocco.ATOMIC: è definito dall'implementazione se un'implementazione sostituisce tutte le
atomic
direttive concritical
direttive con lo stesso nome univoco (vedere la pagina 20).In Visual C++, se i dati modificati dall'atomico non sono allineati in modo naturale o se sono lunghi uno o due byte, tutte le operazioni atomica che soddisfano tale proprietà useranno una sezione critica. In caso contrario, le sezioni critiche non verranno usate.
omp_get_num_threads: se il numero di thread non è stato impostato in modo esplicito dall'utente, il valore predefinito è definito dall'implementazione (vedere la pagina 9).
In Visual C++, il numero predefinito di thread è uguale al numero di processori.
omp_set_dynamic: l'impostazione predefinita per la regolazione dinamica del thread è definita dall'implementazione.
In Visual C++, il valore predefinito è
FALSE
.omp_set_nested: quando è abilitato il parallelismo annidato, il numero di thread usati per eseguire aree parallele annidate è definito dall'implementazione.
In Visual C++, il numero di thread è determinato dal sistema operativo.
OMP_SCHEDULE variabile di ambiente: il valore predefinito per questa variabile di ambiente è definito dall'implementazione.
In Visual C++, il tipo di pianificazione non ha
static
dimensioni di blocco.OMP_NUM_THREADS variabile di ambiente: se non viene specificato alcun valore per la
OMP_NUM_THREADS
variabile di ambiente o se il valore specificato non è un numero intero positivo o se il valore è maggiore del numero massimo di thread che il sistema può supportare, il numero di thread da usare è definito dall'implementazione.In Visual C++, se il valore specificato è zero o minore, il numero di thread è uguale al numero di processori. Se il valore è maggiore di 64, il numero di thread è 64.
OMP_DYNAMIC variabile di ambiente: il valore predefinito è definito dall'implementazione.
In Visual C++, il valore predefinito è
FALSE
.