0% encontró este documento útil (0 votos)
111 vistas34 páginas

ProgrParalelay Distribuida

El documento describe los conceptos fundamentales de la programación distribuida y en paralelo. Explica los diferentes paradigmas como la computación concurrente, programación paralela y distribuida. También cubre temas como memoria compartida, memoria distribuida y redes de conexión para sistemas paralelos y distribuidos.

Cargado por

luisi
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
111 vistas34 páginas

ProgrParalelay Distribuida

El documento describe los conceptos fundamentales de la programación distribuida y en paralelo. Explica los diferentes paradigmas como la computación concurrente, programación paralela y distribuida. También cubre temas como memoria compartida, memoria distribuida y redes de conexión para sistemas paralelos y distribuidos.

Cargado por

luisi
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 34

Programación

distribuida y en paralelo
MTRA. ROSA ISELA LÓPEZ AGUILAR
AGOSTO – DICIEMBRE 2020
1. Conoce los paradigmas y bases
del cómputo paralelo y distribuido.

► 1. Conceptos generales.
► 2. Paradigmas de la Programación en paralelo.
► 3. Constitución de una computadora paralela.
► 4. Modelos de arquitectura (MIMD, SIMD,SISD, MISD).
► 5. Cómputo paralelo y programación en paralelo.
► 6. Memoria compartida y distribuida.
► 7. Red de conexión.
Conceptos Generales

► El procesamiento paralelo es un tipo de procesamiento de la información,


que permite que se ejecuten varios procesos concurrentemente.
► El procesamiento paralelo puede ser de diferentes tipos:
► i) Un tipo es ejecutar procesos independientes simultáneamente, los
cuales son controlados por el sistema operativo (usando tiempo
compartido, multiprogramación y multiprocesamiento).
► ii) Otro tipo es descomponer los programas en tareas (controladas por el
sistema operativo, los compiladores, los lenguajes de programación, etc.),
algunas de las cuales pueden ser ejecutadas en paralelo.
► En los últimos años, el uso extensivo del paralelismo ha estado ligada a varios hechos
1. La necesidad de mayor potencia de cálculo: independientemente de que la
potencia de los procesadores aumente, siempre habrá un limite que dependerá de
la tecnología del momento.
2. Una mejor relación costo/rendimiento: Una manera para lograr mayor poder de
cálculo sin costos excesivos es hacer cooperar muchos elementos de cálculo de
bajo poder, y por consiguiente, de bajos costos.
3. Potencia expresiva de los modelos de procesamiento paralelo: Además del
procesamiento de paralelismo para mejorar los tiempos de ejecución se agrega la
ganancia conceptual, al poder resolver los problemas con nuevos métodos de
resolución hasta ahora imposibles de ejecutarse en máquinas secuenciales.
► A continuación se mencionan algunas áreas en las que se usa
actualmente el paralelismo:
► Procesamiento de imágenes
► Modelado matemático
► Computación inteligente
► Manipulación de base de datos
► Predicción del tiempo
► Algunos de los actuales problemas en esta área son:
► La latencia: la latencia de una máquina paralela es más grande que la de una
máquina secuencial.
► Los anchos de banda: muchas redes de interconexión se han diseñados (mallas, etc.),
algunas con terribles rendimientos y problemas de conflictos.
► La capacidad de acceso a los datos: los mecanismos de pase de mensajes o
memoria compartida tienen una repercusión directa en el rendimiento del sistema.
► Los modelos de programación: muchas proposiciones se han hecho sobre cómo
pensar en programas paralelos.
► Los Compiladores y Sistemas Operativos: una eficiente explotación de una plataforma
paralela pasa por mejores compiladores y sistemas operativos. A pesar de que
sustanciales mejoras se han hecho, aun se requieren más
Paradigmas de la Programación en
paralelo.

► Computación concurrente
► Coherencia y seguridad
► Problema: Cena de los filósofos
► Programación Paralela
► Programación Distribuida
► Comparación entre Paralelo y Distribuido
► Ejemplos
Computación concurrente

► Es la ejecución de múltiples tareas interactivas al mismo tiempo


► Es la base de la computación paralela
► Tareas que se ejecutan al mismo tiempo
► Colección de procesos o hilos secuenciales en paralelo
► Pseudo-paralelismo: cuando la tareas se ejecutan en una maquina secuencial.
► En general, trata de las técnicas de programación que se usan para expresar el
paralelismo entre tareas y para resolver los problemas de comunicación y
sincronización entre procesos.
► El principal problema de la programación concurrente corresponde a no saber en que
orden se ejecutan los programas (en especial los programas que se comunican). Se
debe tener especial cuidado en que este orden no afecte el resultado de los
programas.
Coherencia y Seguridad

► Hilos que accedan recursos compartidos


► Seguridad
► Todos los accesos no tienen efecto sobre los recursos
► Ejemplo: Variables
► Solo un acceso a la vez (Exclusión mutua)

► Un problema clásico – Se ejemplifica con la cena de los filósofos


► Es un problema en ciencias de la computación
► Ejemplo del problema de concurrencia de algoritmos que ilustra la sincronización
► Originalmente formulado en 1965 por Edsger Dijkstra
► Para mostrar como las computadoras pueden competir por acceso a una cinta magnetica
Exclusión mutua

► El método más sencillo de comunicación entre los procesos de un programa


concurrente es el uso común de unas variables de datos. Esto puede llevar a
errores en el programa ya que el acceso concurrente puede hacer que la acción
de un proceso interfiera en las acciones de otro de una forma no adecuada.
► Para evitar este tipo de errores se pueden identificar aquellas regiones de los
procesos que acceden a variables compartidas y dotarlas de la posibilidad de
ejecución como si fueran una única instrucción. Se denomina Sección Crítica a
aquellas partes de los procesos concurrentes que no pueden ejecutarse de forma
concurrente o, también, que desde otro proceso se ven como si fueran una única
instrucción.
► Esto quiere decir que si un proceso entra a ejecutar una sección crítica en la que
se accede a unas variables compartidas, entonces otro proceso no puede entrar
a ejecutar una región crítica en la que acceda a variables compartidas con el
anterior. Las secciones críticas se pueden mutuo excluir.
Problema: Cena de los filosofos
► Hay 5 filósofos sentados en una mesa redonda
► Entre cada filósofo hay un tenedor
► Cada filósofo tiene dos actividades a realizar
► Pensar
► Comer
► El filósofo piensa por un rato
► Cuando tiene hambre, toma el tenedor derecho e izquierdo
► No puede comer si no están ambos tenedores en la mesa
► Libera los tenedores cuando termina de comer
► Problema: Competencia, coherencia y seguridad de recursos
► Semáforos, Exclusión Mutua, etc.
Sistema Paralelo

► Cada procesador puede tener su propia memoria


► En la mayoría de los casos se encuentran servidores con más de un
procesador
► Memoria compartida

► La dirección de memoria de un procesador puede mapear en la memoria de


otro procesador
► Ahí, hay direcciones globales de memoria a través de los procesadores
► Cada procesador opera independientemente de forma concurrente
► El acceso a los datos de otro procesador en otro servidor lo define explícitamente el
usuario
► Paso de mensajes, sincronización, etc.
Ventajas

► Muy poco tiempo en transmitir mensajes entre procesadores, o servidores


► Dado que está fuertemente conectado
► Recursos muy cercanos entre ellos
► Usualmente no mayor a una habitación.

► Sistemas dedicados a cómputo intensivo


► Muy rápido en procesamiento
Desventajas

► El consumo eléctrico es un problema, dado que recae en una sola


institución (por lo regular)
► Por ejemplo, la carga de trabajo podría repartirse en usuarios de todo el
mundo (en sus PCs)
► Un ejemplo de ello se dio con el Folding@home, donde usuarios de todo el
mundo podían ejecutar programas para el análisis de proteínas.
Sistema Distribuido

► Cada procesador tiene su propia memoria


► La dirección de memoria de un procesador no mapea en la memoria de
otro procesador
► No hay direcciones globales de memoria a través de los procesadores
► Cada procesador opera independientemente
► El acceso a los datos de otro procesador lo define explícitamente el usuario
► Paso de mensajes, sincronización, etc.
► Ventajas
► Memoria escalar con el número de procesadores
► Cada procesador accede a su propia memoria sin interferencia ni sobrecarga
(overhead) causado por mantener la coherencia de la memoria
► Desventajas
► El programa es responsable de la comunicación
► Difícil mapear datos basados en memoria global
Memoria Compartida y Memoria
Distribuida

► Memoria Compartida: En las primeras computadoras a memoria


compartida, todos los procesadores podían acceder a toda la memoria.
Por supuesto, esto generaba cuellos de botellas para acceder la
memoria.
► El siguiente paso fue dividir la memoria en bancos de memoria, lo que
requería una red de interconexión entre los procesadores y los bancos de
memoria. Así, diferentes procesadores podían acceder diferentes bancos
al mismo tiempo. Pero si el número de bancos y de procesadores es
grande, resulta costoso desde el punto de vista tecnológico, el conectar
directamente todos los bancos con los procesadores.
► Una solución es usar redes del tipo por etapas, lo que obliga que para
cada acceso a memoria, se debe recorrer una secuencia de enlaces. Si
el número de procesadores y bancos crece, este tipo de redes es
inmanejable (muchas conexiones y latencia inaceptable), por lo que se
propuso la definición de redes parciales, donde cada procesador sólo se
conecta a ciertos bancos (ya no hay un espacio global de
direccionamiento y dos procesadores pueden no tener bancos en
común).
Memoria distribuida

► Memoria distribuida: Otra forma es conectar a los procesadores directamente


entre ellos (la memoria esta distribuida entre los procesadores), teniéndose así
una máquina a memoria distribuida sin espacio de direcciones globales.
► Las principales diferencias entre las redes de máquinas a memoria compartida
y a memoria distribuida son:
► - Ancho de Banda: es la cantidad de información transmitida por unidad de
tiempo, es decir, es el número de bits que pueden ser transmitidos por unidad
de tiempo. En las máquinas a memoria compartida se deben transmitir un
número de datos suficientes para alimentar a los diferentes procesadores, por
lo que debe ser grande el ancho de banda; mientras que en las máquinas a
memoria distribuida es de órdenes de magnitud más pequeña.
► - Latencia de la red: es el tiempo que necesita la red para realizar el servicio
pedido, es decir, es el tiempo para realizar una transferencia a través de la red.
► En las máquinas a memoria compartida debe ser pequeño, por lo que se
deben tener caminos cortos y rápidos de comunicación entre los
procesadores y los bancos. En las máquinas a memoria distribuida es
menos crítico, y se pueden tener caminos largos.
► - Información a transmitir: clásicamente, en las máquinas a memoria
compartida se pueden transmitir datos, instrucciones, direcciones de
memoria; mientras que en las máquinas a memoria distribuida se
transmiten datos.
Red de conexión.

► Como la memoria local de cada procesador no puede ser accesada por


otro computador, la red de interconexión es usada para que los
procesadores se comuniquen a través de pase de mensajes (los mensajes
incluyen datos, requerimientos, etc.).
► Programar una aplicación para estos sistemas implica dividir el programa
en tareas independientes, algunas de las cuales podrán ser ejecutadas
concurrentemente.
► En este caso se habla de espacios de memorias locales, y la
comunicación entre los procesadores se hace explícitamente a través de
pase de mensajes, usando la red de interconexión.
► El componente central de esta arquitectura para un buen rendimiento,
es la red de interconexión. El tipo de configuración soportada y sus
elementos varían increíblemente (desde PC hasta procesadores RISC).
► Hay dos maneras para realizar las Entradas/Salidas: cada procesador
tiene su propio sistema de Entradas/Salidas, o se tiene una red de
Entradas/Salidas que se usa ya sea porque hay nodos servidores de
Entradas/Salidas o las unidades de Entradas/Salidas están directamente
conectadas a la red.
► Entre sus ventajas está lo fácil que crecen (tanto a nivel de tamaño de
memoria, de ancho de banda, como de poder de cálculo), Su mayor
desventaja es el ineficiente uso de la memoria y los problemas de
sincronización.
Constitución de una computadora
paralela.

► La taxonomía de Flynn es la clásica clasificación usada en computación paralela.


► La idea central de ésta se basa en el análisis del flujo de instrucciones y de datos,
los cuales pueden ser simples o múltiples, originando la aparición de 4 tipos de
máquinas.
► Esta clasificación está basada en el número de flujos de instrucciones y de datos
simultáneos que pueden ser tratados por el sistema computacional durante la
ejecución de un programa.
► Un flujo de instrucción es una secuencia de instrucciones transmitidas desde una
unidad de control a uno o más procesadores. Un flujo de datos es una secuencia
de datos que viene desde un área de memoria a un procesador y viceversa.
► Se pueden definir las variables ni y n d como el número de flujos de instrucciones y datos
Modelos de arquitectura (MIMD,
SIMD,SISD, MISD).

► SISD (Single Instruction Stream, Single Data Stream)

► Está compuesto de una memoria central donde se guardan los datos y los programas,
y de un procesador. En este caso, ni y nd = 1. En esta plataforma sólo se puede dar un
tipo de paralelismo virtual a través del paradigma de multitareas, en el cual el tiempo
del procesador es compartido entre diferentes programas. Así, más que paralelismo lo
que soporta esta plataforma es un tipo de concurrencia.
► SIMD (Single Instruction Stream, Multiple Data Stream)

► Arreglo de elementos de procesamiento, todos los cuales ejecutan la


misma instrucción al mismo tiempo. En este caso, ni = 1y nd > 1.
► El enfoque de paralelismo usado aquí se denomina paralelismo de datos
► En estas arquitecturas, un controlador recibe y decodifica secuencias de
instrucciones a ejecutar, para después enviarlas a múltiples procesadores
esclavos. El arreglo de procesadores procesa los datos que llegan a los
diferentes procesadores, usando la instrucción enviada por el controlador
► Los procesadores están conectados a través de una red. Los datos a
tratar pueden estar en un espacio de memoria que es común a todos los
procesadores o en un espacio de memoria propio a cada unidad de
procesamiento. Todos los procesadores trabajan con una perfecta
sincronización
► La gran desventaja es el tipo de procesamiento (no es un tipo de
procesamiento que aparece frecuentemente), ya que el código debe
tener una dependencia de datos que le permita descomponerse
► Su funcionamiento es el siguiente: un simple controlador envía las
instrucciones, una a una, a un arreglo de procesadores que operan en el
esquema maestro-esclavo. Es decir, las instrucciones son difundidas
desde la memoria a un conjunto de procesadores.
► Así, cada procesador es simplemente una unidad aritmética-lógica y se
tiene una sola unidad de control. Todos los procesadores ejecutan cada
operación recibida al mismo tiempo, por lo cual, cada uno ejecuta la
misma instrucción sobre diferentes datos
► MISD (Multiple Instruction Stream, Single Data Stream)

► Muchos autores consideran que esta clase no corresponde a un modo de


funcionamiento realista
► Estas son computadoras con elementos de procesamiento, cada uno
ejecutando una tarea diferente, de tal forma que todos los datos a
procesar deben ser pasados a través de cada elemento de
procesamiento para su procesamiento. En este caso, , ni >1y nd = 1.
► La idea es descomponer las unidades de procesamiento en fases, en
donde cada una se encarga de una parte de las operaciones a realizar.
De esta manera, parte de los datos pueden ser procesados en la fase 1
mientras otros son procesados en la 2, otros en la tres, y así sucesivamente.

► El flujo de información es continuo y la velocidad de procesamiento


crece con las etapas.
► MIMD (Multiple Instruction Stream, Multiple Data Stream)
► Es el modelo más general de paralelismo, y debido a su flexibilidad, una
gran variedad de tipos de paralelismo pueden ser explotados.
► Las ideas básicas son que múltiples tareas heterogéneas puedan ser
ejecutadas al mismo tiempo, y que cada procesador opere
independientemente con ocasionales sincronizaciones con otros. Está
compuesto por un conjunto de elementos de procesamiento donde
cada uno realiza una tarea, independiente o no, con respecto a los otros
procesadores.
► La forma de programación usualmente utilizada es del tipo concurrente,
en la cual múltiples tareas, quizás diferentes entre ellas, se pueden
ejecutar simultáneamente.
► En este caso, ni > 1y nd > 1 . Muchos sistemas de multiprocesadores y
sistemas de múltiples computadores están en esta categoría. Un
computador MIMD es fuertemente acoplado si existe mucha interacción
entre los procesadores, de lo contrario es débilmente acoplado.

También podría gustarte