openmp
Eenvoudig parallel voorbeeld
Zoeken…
Syntaxis
#pragma omp parallel
geeft aan dat het volgende blok door alle threads moet worden uitgevoerd.int omp_get_num_threads (void)
: geeft als resultaat het aantal threads dat in de parallelle regio werkt (ook wel team met threads genoemd).int omp_get_thread_num (void)
: retourneert de identifier van de aanroepende thread (varieert van 0 tot N-1 waar N is begrensd totomp_get_num_threads()
).
Opmerkingen
U kunt de omgevingsvariabele OMP_NUM_THREADS
of de richtlijn num_threads
binnen de #pragma parallel
gebruiken om het aantal uitvoerende threads voor respectievelijk de hele toepassing of voor het opgegeven gebied aan te geven.
Parallelle hallo wereld met OpenMP
De volgende C-code gebruikt het parallelle programmeermodel OpenMP om de thread-ID en het aantal threads naar stdout
met behulp van meerdere threads.
#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+ ziet het equivalente programma er als volgt uit:
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