OpenMP è una specifica API che consente l’esecuzione parallela di task secondo il modello a memoria condivisa. Questo consente di creare programmi che implementano la programmazione parallela da poter eseguire sia nei cluster, se usato in combinazione di MPI, sia su normali computer desktop. I linguaggi supportati sono CC++ e Fortran.
In concreto OpenMP è implementata come estensione di un compilatore, quindi è sufficiente aggiungere un opportuno parametro al comando di compilazione: ad esempio, nelle ultime versioni di GCC il parametro è -fopenmp. OpenMP non necessita di librerie esterne, i comandi vengono forniti sotto forma di commenti speciali. Una caratteristica estremamente utile, se si vuole utilizzare lo stesso codice senza imporre un’esecuzione parallela.
Un classico esempio, per questo genere di programmazione, è la parallelizzazione dei cicli: il comando è #pragma omp parallel for. Sono inoltre disponibili diversi metodi di sincronizzazione per sezioni critiche, variabili condivise e race condition: critical, atomic, ordered, barrier e nowait. Inoltre si può specificare il numero di thread da console, in fase di compilazione, con la variabile d’ambiente OMP_NUM_THREADS=n°thread.
OpenMP dispone di una lunga esperienza come standard (la prima versione è del 1998) e di un consorzio composto da nomi di tutto rispetto come Intel, AMD, Fujitsu, Oracle e molti altri. C’è una sola “pecca” degna di nota, a mio parere: non può essere utilizzata per le GPU. Una lacuna che si spera venga colmata presto.
Via | Linux Journal
Programmazione parallela con OpenMP é stato pubblicato su Ossblog.it alle 12:00 di giovedì 27 ottobre 2011.