Está en la página 1de 17

Introducción a la programación paralela

Modelos de memoria compartida y paso de mensajes

José Orlando Maldonado Bautista


Facultad de Ingenierías y Arquitectura

9 de octubre de 2023
Contenido
...Taxonomía de Flynn
Modelos de programación paralela

▶ Los modelos de programación existen como una abstracción


lógica sobre la arquitectura de hardware y de software.
▶ El programador diseña su programa de acuerdo al modelo
elegido, obviando los detalles especícos de la arquitectura
H/S.
▶ En teoría cualquiero modelo puede ser implementado en el
hardware de base.
▶ Las elecciones del modelo están relacionadas con las
apreciaciones personales, el problema y la disponibilida de
equipos.
Modelos de programación paralela
Características deseables en un modelo de programación paralela

▶ Abstracción . Que oculte los detalles de la plataforma H/S de


ejecución.
▶ Portabilidad. Que el programa pueda ser ejecutado en
diferentes plataformas.
▶ Escalabilidad. Ejecución eciente en máquinas paralelas con
diferente cantidad de procesadores. Aumentando el
rendimiento al aumentar el numero de procesadores.
▶ Predictibilidad. Que permita realizar estimaciones de
rendimiento.
Modelos de programación paralela
Modelo de programación de memoria compartida

En el modelo de programación de memoria compartida, los


procesadores se comunican y sincronizan a través de variables
compartidas, ya que tienen acceso a las direcciones de memoria
donde se aloja cada dato.
Modelo de programación mediante paso de mensajes

En el modelo de programación de memoria compartida, los


procesadores se comunican y sincronizan mediante información
enviada/recibida a través de una red de comunicación. En dicho
modelo un procesador no tiene acceso directo a las direcciones de
memoria donde se alojan los datos de otro.
Programación de memoria compartida mediante OpenMP

OpenMP ( Open Multi-Processing ) es una interfaz de


programación de aplicaciones (API) que admite la programación
multiprocesamiento de memoria compartida multiplataforma en C ,
C ++ y Fortran.(Casi un estándar).
Programación de memoria compartida mediante OpenMP

Características
▶ Consta de un conjunto de directivas del compilador, rutinas

de biblioteca y variables de entorno, las cuales inuyen en


el comportamiento en tiempo de ejecución.
▶ Las directivas al compilador, son instrucciones dadas al
compilador que expanden el ambito del entorno de
programación en C, aunque no hacen parte del lenguaje.

▶ Una variable de entorno es un valor con nombre dinámico que


puede afectar la manera en que se comportarán los procesos
en ejecución en un equipo.
Programación de memoria compartida mediante OpenMP

Características
▶ OpenMP implementa subprocesos múltiples (múltiples hilos).
▶ Un subproceso primario (una serie de instrucciones ejecutadas
secuencialmente) bifurca un número especíco de subprocesos
(hilos) y el sistema divide una tarea entre ellos.
▶ Posteriormente, los subprocesos (hilos) se ejecutan en paralelo,
y el entorno de ejecución asigna subprocesos (hilos) a
diferentes procesadores.
Programación de memoria compartida mediante OpenMP
Modelo de programación

▶ Este es el denominado modelo .


Fork-Join
Programación de memoria compartida mediante OpenMP
Modelo de programación

Cómo se especican las directivas en OpenMP


#pragma omp directiva[cláusulas]

Un primer ejemplo: Hola Mundo !!!


#include<stdio.h>
#include<omp.h>

int main()
{
#pragma omp parallel
printf(" Hola mundo..\n");
return 0;
}

)
(* Ver omp_ejemplo01.cpp
Programación de memoría compartida mediante OpenMP
Gestionando lo hilos...

Dentro de las rutinas suministradas por la biblioteca de OpenMP se


tienen algunas que permiten gestionar los hilos lanzados en la
región paralela.
▶ Obtener el número de hilos que están en ejecución.
int omp_get_num_threads()
▶ Fijar el número máximo de hilos que usará el programa.
void omp_set_num_threads(int n)
▶ Retornar el identicador de cada hilo. Este es un numero entre
0 y n-1, con n=número total de hilos.
int omp_get_thread_num()
▶ Retornar el número de núcleos o de procesadores del
computador.
int omp_get_num_procs()
(* Ver omp_ejemplo02.cpp, omp_ejemplo02.cpp)
Programación de memoria compartida mediante OpenMP
Clausulas en las directivas

▶ La lista de clausulas en una directiva permita dirigir el


comportamiento de la directiva.
▶ Por ejemplo, se puede utilizar para especicar paralelizaciones
condicionales, el número de hilos, y mecanismos para la
gestion de datos.
▶ Existen clausulas que son comunes entre las directivas, y otras
que no lo son.
(* Ver omp_ejemplo04.cpp, omp_ejemplo04_2.cpp)
Programación de memoria compartida mediante OpenMP
Variables privadas y variables compartidas

▶ Las variables que se utilizan en una región paralela pueden ser


privadas (private) o compartidas (shared).
▶ En las variables compartidas (shared), todos los hilos acceden
a las mismas posiciones de memoria y solo hay una copia de
las variables. Es decir, la variables especicadas en la lista
serán compartidas por todos los hilos en ejecución. Se requiere
especial cuidado en este tipo de variables para tener garantía
del uso correcto de las mismas. Si no se especica, por defecto
todas las variables son compartidas.
▶ En las variables privadas (private), cada variable especicada
en la lista, es local a cada hilo. Es decir, cada hilo tiene su
propia copia de las variables de la lista.
(* Ver omp_ejemplo05.cpp, omp_ejemplo05_2.cpp)
Programación de memoria compartida mediante OpenMP

La clausula reduction
reduction(operador:lista-de-variables)

▶ Esta clausua especica como se combinan las múltiples copias


locales de una variable, correspondiente a los distintos hilos en
ejecución, en una única copia en el hilo maestro cuando
nalice la directiva paralela.
▶ Las clausulas de la lista se consideran privadas a cada hilo. El
operados puede ser: *, +, -, , |, , , ||. (* Ver omp_ejemplo09.cpp)

También podría gustarte