MP abierto | Introducción con guía de instalación

Después de una larga sed de paralelizar bucles altamente regulares en la programación numérica orientada a arrays, OpenMP Architecture Review Board (ARB) presentó OpenMP en 1997 . En los lanzamientos posteriores, el entusiasta equipo de OpenMP le agregó muchas características, incluida la paralelización de tareas, soporte para aceleradores, reducciones definidas por el usuario y mucho más. La última versión de OpenMP 5.0 se realizó en noviembre de 2018.

Open Multi-processing (OpenMP) es una técnica de paralelizar una sección (s) de código C/C++/Fortran. OpenMP también se ve como una extensión de los lenguajes C/C++/Fortran al agregarles funciones de paralelización. En general, OpenMP utiliza un modelo portátil y escalable que brinda a los programadores una interfaz simple y flexible para desarrollar aplicaciones paralelas para plataformas que van desde la computadora de escritorio normal hasta las supercomputadoras de gama alta.

HILO VS PROCESO
El sistema operativo crea un proceso para ejecutar un programa con recursos dados (memoria, registros); generalmente, diferentes procesos no comparten su memoria con otro. Un subproceso es un subconjunto de un proceso y comparte los recursos de su proceso principal, pero tiene su propia pila para realizar un seguimiento de las llamadas a funciones. Múltiples subprocesos de un proceso tendrán acceso a la misma memoria.

Arquitecturas de memoria paralela
Antes de profundizar en OpenMP, revivamos las arquitecturas de memoria paralela básicas.
Estos se dividen en tres categorías;

  • Memoria compartida: OpenMP viene bajo el concepto de memoria compartida. En esto, diferentes CPU (procesadores) tendrán acceso a la misma ubicación de memoria. Dado que todas las CPU se conectan a la misma memoria, el acceso a la memoria debe manejarse con cuidado.Shared Memory Architecture
  • Memoria distribuida: aquí, cada CPU (procesador) tendrá su propia ubicación de memoria para acceder y usar. Para que se comuniquen, todos los sistemas independientes se conectarán entre sí mediante una red. MPI se basa en una arquitectura distribuida.Distributed Memory Architecture
  • Híbrido: Híbrido es una combinación de arquitecturas compartidas y distribuidas. Un escenario simple para mostrar el poder de OpenMP sería comparar el tiempo de ejecución de un programa C/C++ normal y el programa OpenMP.

Pasos para la instalación de OpenMP

  • PASO 1: Comprobar la versión GCC del compilador
    gcc --version

    GCC brinda soporte para OpenMP a partir de su versión 4.2.0. Entonces, si el sistema tiene un compilador GCC con una versión superior a 4.2.0, entonces debe tener las funciones de OpenMP configuradas con él.

    Si el sistema no tiene el compilador GCC, podemos usar el siguiente comando

    sudo apt install gcc

    Para soporte más detallado para la instalación, podemos consultar aquí

  • PASO 2: Configuración de OpenMP
    Podemos verificar si las características de OpenMP están configuradas en nuestro compilador o no, usando el comando
    echo |cpp -fopenmp -dM |grep -i open

    Si OpenMP no aparece en el compilador, podemos configurarlo usando el comando

    sudo apt install libomp-dev
  • PASO 3: Configuración del número de subprocesos
    En OpenMP, antes de ejecutar el código, podemos inicializar el número de subprocesos que se ejecutarán con el siguiente comando. Aquí, establecemos la cantidad de subprocesos que se ejecutarán en 8 subprocesos.
    export OMP_NUM_THREADS=8

Ejecutando el primer código en OpenMP

// OpenMP header
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
  
int main(int argc, char* argv[])
{
    int nthreads, tid;
  
    // Begin of parallel region
    #pragma omp parallel private(nthreads, tid)
    {
        // Getting thread number
        tid = omp_get_thread_num();
        printf("Welcome to GFG from thread = %d\n",
               tid);
  
        if (tid == 0) {
  
            // Only master thread does this
            nthreads = omp_get_num_threads();
            printf("Number of threads = %d\n",
                   nthreads);
        }
    }
}

Producción:

Este programa imprimirá un mensaje que será ejecutado por varios subprocesos.

Compile: 
gcc -o gfg -fopenmp geeksforgeeks.c

Execute:
./gfg

Publicación traducida automáticamente

Artículo escrito por Akbar B y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *