Exemple parallèle simple

Syntaxe

  • #pragma omp parallel indique que le bloc suivant doit être exécuté par tous les threads.

  • int omp_get_num_threads (void) : renvoie le nombre de threads travaillant sur la région parallèle (c’est-à-dire l’équipe de threads).

  • int omp_get_thread_num (void) : renvoie l’identifiant du thread appelant (de 0 à N-1 où N est borné à omp_get_num_threads()).

Vous pouvez utiliser la variable d’environnement OMP_NUM_THREADS ou la directive num_threads dans le #pragma parallel pour indiquer le nombre de threads en cours d’exécution pour l’ensemble de l’application ou pour la région spécifiée, respectivement.

Parallèle hello world en utilisant OpenMP

Le code C suivant utilise le modèle de programmation parallèle OpenMP pour écrire l’ID de thread et le nombre de threads sur “stdout” à l’aide de plusieurs 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;
}

Dans Fortran 90+, le programme équivalent ressemble à :

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