openmp
Semplice esempio parallelo
Ricerca…
Sintassi
#pragma omp parallel
indica che il seguente blocco deve essere eseguito da tutti i thread.int omp_get_num_threads (void)
: restituisce il numero dei thread che lavorano sulla regione parallela (alias team di thread).int omp_get_thread_num (void)
: restituisce l'identificatore del thread chiamante (va da 0 a N-1 dove N è limitato aomp_get_num_threads()
).
Osservazioni
È possibile utilizzare la variabile di ambiente OMP_NUM_THREADS
o la direttiva num_threads
all'interno del #pragma parallel
per indicare rispettivamente il numero di thread in esecuzione per l'intera applicazione o per l'area specificata.
Mondo ciao parallelo usando OpenMP
Il seguente codice C utilizza il modello di programmazione parallela OpenMP per scrivere l'ID del thread e il numero di thread sullo stdout
utilizzando più thread.
#include <omp.h>
#include <stdio.h>
int main ()
{
#pragma omp parallel
{
// ID of the thread in the current team
int thread_id = omp_get_thread_num();
// Number of threads in the current team
int nthreads = omp_get_num_threads();
printf("I'm thread %d out of %d threads.\n", thread_id, nthreads);
}
return 0;
}
In Fortran 90+ il programma equivalente ha il seguente aspetto:
program Hello
use omp_lib, only: omp_get_thread_num, omp_get_num_threads
implicit none
integer :: thread_id
integer :: nthreads
!$omp parallel private( thread_id, nthreads )
! ID of the thread in the current team
thread_id = omp_get_thread_num()
! Number of threads in the current team
nthreads = omp_get_num_threads()
print *, "I'm thread", thread_id, "out of", nthreads, "threads."
!$omp end parallel
end program Hello