F. Nuovi chiarimenti e funzionalità della versione 2.0
Questa appendice riepiloga le modifiche chiave apportate alla specifica OpenMP C/C++ nel passaggio dalla versione 1.0 alla versione 2.0. Di seguito sono elencate le nuove funzionalità aggiunte alla specifica:
Le virgole sono consentite nelle direttive OpenMP.
Aggiunta della
num_threads
clausola . Questa clausola consente a un utente di richiedere un numero specifico di thread per un costrutto parallelo.La direttiva threadprivate è stata estesa per accettare variabili di ambito blocco statico.
Le matrici di lunghezza variabile C99 sono tipi completi e possono essere specificati ovunque siano consentiti tipi completi, ad esempio negli elenchi di
private
clausole ,firstprivate
elastprivate
(vedere la sezione 2.7.2).Una variabile privata in un'area parallela può essere contrassegnata nuovamente come privata in una direttiva annidata.
La
copyprivate
clausola è stata aggiunta. Fornisce un meccanismo per usare una variabile privata per trasmettere un valore da un membro di un team agli altri membri. È un'alternativa all'uso di una variabile condivisa per il valore quando si specifica una variabile condivisa di questo tipo sarebbe difficile (ad esempio, in una ricorsione che richiede una variabile diversa a ogni livello). La clausola copyprivate può essere visualizzata solo nellasingle
direttiva .Aggiunta di routine di intervallo omp_get_wtick e omp_get_wtime simili alle routine MPI. Queste funzioni sono necessarie per eseguire intervalli di orologio a parete.
È stata aggiunta un'appendice con un elenco dei comportamenti definiti dall'implementazione in OpenMP C/C++. In questi casi è necessaria un'implementazione per definire e documentarne il comportamento.
Le modifiche seguenti consentono di chiarire o correggere le funzionalità nella precedente specifica dell'API OpenMP per C/C++:
È stato spiegato che il comportamento di omp_set_nested e omp_set_dynamic quando
omp_in_parallel
restituisce un valore diverso da zero non è definito.Chiarimento dell'annidamento delle direttive quando viene usato il parallelismo annidato.
Le funzioni di inizializzazione e di distruzione dei blocchi possono essere chiamate in un'area parallela.
Sono stati aggiunti nuovi esempi all'appendice A.