Condividi tramite


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 con critical 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.