Condividi tramite


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 privateclausole , firstprivatee lastprivate (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 nella single 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.