Ejemplo paralelo simple

Sintaxis

  • #pragma omp paralelo indica que el siguiente bloque será ejecutado por todos los hilos.

  • int omp_get_num_threads (void) : devuelve el número de subprocesos que trabajan en la región paralela (también conocido como equipo de subprocesos).

  • int omp_get_thread_num (void) : devuelve el identificador del subproceso de llamada (va de 0 a N-1 donde N está limitado a omp_get_num_threads()).

Puede utilizar la variable de entorno OMP_NUM_THREADS o la directiva num_threads dentro de #pragma parallel para indicar el número de subprocesos en ejecución para toda la aplicación o para la región especificada, respectivamente.

Hola mundo en paralelo usando OpenMP

El siguiente código C utiliza el modelo de programación paralela de OpenMP para escribir el ID del subproceso y el número de subprocesos en stdout utilizando varios subprocesos.

#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;
}

En Fortran 90+, el programa equivalente se ve así:

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