Rilasciate le API OpenMP 5.0

OpenMP sono probabilmente le API più utilizzate per parallelizzare applicazioni eseguite su processori multicore e con l’ultima release anche su GPU.

OpenMP sono delle API che supportano la programmazione multi processo a memoria condivisa in C, C++ e Fortran, su molte piattaforme e sistemi operativi, inclusi Solaris, AIX, HP-UX, Linux, macOS e Windows. Consistono in una collezione di direttive per il compilatore, routine di libreria e variabili d’ambiente che ne influenzano il comportamento a runtime.

Le ultime API OpenMP 5.0 sono state rilasciate a novembre 2018 ed è probabilmente il più importante aggiornamento al framework sin dal primo rilascio del 1997.
Alcune delle funzionalità delle nuove API sono state in fase di sviluppo per più di cinque anni.

Nelle OpenMP 5.0, la più grande innovazione a riguardo di GPUs è il modello di memoria unificato fra Gpu e Cpu. “Non dovrete più trasferire le proprietà dei dati, potete accedere direttamente alle regioni CPU e GPU” dice Michael Klemm, chief executive officer per il Consorzio OpenMP Architecture Review Board.

OpenMP implementa il design pattern fork-join: il master thread attiva una regione parallela dividendosi in un team di Thread paralleli (Worker), successivamente questi Thread effettuano un join con il master alla fine della regione parallela.

 

 

openMP_fork


Flusso dei Thread OpenMP e Design Pattern Fork-Join

 

Semplice esempio di Thread Paralleli con OpenMP in linguaggio di programmazione C

#include <stdio.h>
#include <omp.h>

int main(){
#pragma omp parallel
   {
      int testId = omp_get_thread_num();
      int nThreads = omp_get_num_threads();

      printf("Thread %d out of %d.\n", testId, nThreads);
      for(int k=0; k<3; k++){
         printf("Iteration number:%d\n",k);
      }
   }
   printf("Returned to the Main Thread\n");
}

 

Scarica qui la Reference ufficiale delle API OpenMP 5.0