Logo Studenta

arquitectura paralelas

¡Este material tiene más páginas!

Vista previa del material en texto

Arquitecturas Paralelas
Aplicación de Algoritmos paralelos y distribuidos
Conceptos Preliminares
HPC (High Performance Computing) en general se refiere a la práctica de sumar potencia computacional con el fin de alcanzar mayor rendimiento en la ejecución de programas que resuelven problemas de gran tamaño de la ciencia, ingeniería o negocios.
HPC proporciona una mayor capacidad de cómputo que la que se puede obtener de computadores individuales.
→ Computación paralela
→ Computación distribuida
Conceptos Preliminares
Sumar mas hardware para responder de una mejor forma a las aplicaciones lleva a tener en cuenta otros conceptos:
Concurrencia.
Paralelismo
Computación paralela:
Hardware paralelo.
Software paralelo.
Computación distribuida
Sistema distribuido.
Computación Paralela:
Es la utilización de múltiples procesadores para resolver una tarea común. Se divide el problema es trozos más pequeños y se asignan a diferentes procesadores.
Software paralelo: varios procesos o hilos que cooperan para la resolución de un problema, con el objetivo de lograr mayor rendimiento que un software secuencial.
Arquitectura paralela: arquitectura con varias unidades de procesamiento que permiten el procesamiento paralelo.
De memoria compartida: multiprocesadores, multicores, GPU.
De memoria distribuida: cluster, multicluster, grid, cloud.
Heterogéneos/Híbridos.
16
Concurrencia:
Simultaneidad en la ejecución de múltiples tareas (procesos/hilos).
Es un concepto de software.
Se deben especificar los procesos concurrentes, su comunicación y sincronización.
concurrencia
7
Procesos - hilos
PROCESO
Una instancia de un programa en ejecución con los estados necesarios para permanecer en ejecución – la mayoría de las aplicaciones son procesos
Crear un nuevo proceso puede ser costoso en CPU, se lleva tiempo y memoria
HILO
Una instancia de subtareas subdivididas para ejecutarse en paralelo – muchas aplicaciones se dividen en múltiples hilos
Los hilos pueden crearse sin replicar todo el proceso
¿Por qué usar hilos?
9
Multi-core Programming: Basic Concepts
Procesos e Hilos
Los sistemas operativos modernos cargan programas como procesos
Tiene recursos
Ejecución
Un proceso inicia ejecutando su punto de entrada como un hilo
Los hilos pueden crear otros hilos dentro del proceso
Cada hilo obtiene su propio stack
Todos los hilos dentro de un proceso comparten código y segmentos de datos
Code segment
Data segment
thread
main()
…
thread
thread
Stack
Stack
Stack
Concurrencia vs. Paralelismo
Concurrencia: dos o más hilos están en progreso al mismo tiempo:
Paralelismo: dos o más hilos están ejecutandose al mismo tiempo
Se requieren varios núcleos
Hilo 1
Hilo 2
Hilo 1
Hilo 2
Paralelismo:
Se basa en la concurrencia pero requiere de hardware adicional.
Su objetivo es mejorar el rendimiento:
Tiempo de cómputo.
Consumo energético (nuevos mecanismos en hardware)
Es un concepto de hardware.
Permite:
Resolver más problemas.
Resolver problemas más grandes.
Resolver problemas más rápido.
12
Flujo de Tráfico en una Autopista
La Analogía
Una Autopista  Procesador Multi Core
Con Muchos Carriles  Núcleo
Donde los Vehículos son Hilos de una Aplicación
Y la Longitud de un Vehículo es el Tiempo de Ejecución de un Hilo
Y todo el Flujo de Tráfico es la Ejecución del Procesador
Imagina…
Flujo de Tráfico en una Autopista
La Analogía
4 Carriles = 4 Núcleos
Los vehículos son hilos de una aplicación
La línea final representa la ejecución
Multi-core Programming: Basic Concepts
Flujo de Tráfico en una Autopista 
Partiendo Procesos
Un solo hilo…
O… Unos pocos hilos grandes, de cómputo intensivo, hilos dependientes y quizá unos cuantos hilos cortos independientes o hilos más cortos
O… Un bonche de hilos cortos independientes
Multi-core Programming: Basic Concepts
Analogía con el Tráfico de una Autopista 
¿Qué se puede lograr con el paralelismo?
Suponer que tenemos un convoy largo de carga: troncos de madera…
Una aplicación no paralelizada
Vamos a dividir en 4 trocas más pequeñas…
Cuatro hilos independientes
Ahora, podemos poner una troca en cada carril…
Explotar los múltiples núcleos…
La carga llega mucho más rápido!
Resultado: Mejora la tasa de trabajos!
Multi-core Programming: Basic Concepts
Analogía con el Tráfico de una Autopista
Resumen
Dividir un hilo grande en n hilos más pequeños e independientes permite que el SO los planifique en diferentes núcleos… incrementando la tasa de trabajos.
Igual que en la autopista, los vehículos grandes causan que el tráfico se entorpezca… Los pequeños permiten un flujo más rápido…
El SO ayuda a manejar el tráfico, pero el desarrollador se asegura que cada carril pueda tener suficiente tráfico para que el SO lo pueda planificar, permitiendo la mayor tasa de trabajos de carga (datos).
17
Tipos de Paralelismo
por Funcionalidad
Asignar hilos a funciones separadas hechas por la aplicación
El método más fácil desde que sobreponer tareas es obvio (ejemplo esperar actualización de una Interfaz de Usuario)
Por lo general, mejorar la capacidad de respuesta y funcionalidad
A menudo se hace a través de un modelo de programación por descomposición funcional
por Rendimiento
Paralelizar para mejorar tiempo de retorno o tasa de trabajos
Más difícil ya que los desarrolladores necesitan tener un conocimiento profundo de flujo de datos y estructuras de datos
Por lo general, mejorar el desempeño en general
Usualmente se hace mediante un modelo de programación de descomposición de datos
18
Multi-core Programming: Basic Concepts
Creando hilos por funcionalidad
Asignar hilos a diferentes funciones de la aplicación
El método más simple ya que no hay como sobreponer
 
Ejemplo: Construyendo una casa
Albañil, carpintero, pintor, plomero,…
Threading for Functionality or Performance?
19
Multi-core Programming: Basic Concepts
Hilos para el rendimiento
Mejora el rendimiento de computadoras
Paralelizar para mejorar el tiempo de retorno o la tasa de trabajos
Ejemplos
Línea de ensamblado de automóviles
Cada trabajador hace una función asignada
Servicio postal de USA
Oficinas postales, clasificadores, entrega
Threading for Functionality or Performance?
20
Multi-core Programming:Basic Concepts
Tiempo de retorno
Completa una sola tarea en la menor cantidad de tiempo
Ejemplo: Los padres están por llegar en una hora
Pedro limpia la sala
 Hugo limpia el baño
 Thomas limpia la cocina
Threading for Throughput or Turnaround?
21
Multi-core Programming: Basic Concepts
Balanceo de carga
La distribución más efectiva es tener la misma cantidad de trabajo por hilo
Los primeros hilos que terminan se convierten en ociosos
Los hilos deben terminar casi al mismo tiempo
Ejemplo: Poner las mesas de un banquete
Lo mejor es asignar la misma cantidad de mesas a cada cuadrilla
Granularity and Load Balance
El objetivo de programar una aplicación paralela es:
Ejecutar el problema más rápido
Ejecutar un problema de mayor tamaño.
Ejecutar con mayor precisión
COMPUTO
COMUNICACIÓN
SINCRONIZACION
PARALELISMO
Arquitecturas paralelas
Arquitecturas de memoria distribuida:
Clusters
Grid
Cloud
Las arquitecturas paralelas permiten sumar capacidad de cómputo
Arquitecturas de memoria compartida:
Multiprocesadores
Multicores
Co-procesadores (GPUs-XeonPHI)
El mas conocido se llama BEOWULF (corre bajo Linux)
Computación Distribuida
Es la utilización de múltiples sistemas, de alguna forma organizada, para trabajar en un objetivo común.
La definición abarca dos aspectos:
Hardware: máquinas autónomas
Software: imagen de sistema único
Sistema distribuido
“Un conjunto de ordenadores independientes (conectados en red) que ofrecen a sus usuarios la imagen de un sistema único”
Su objetivo no necesariamente es reducir tiempo.
Un sistema distribuido esta compuesto por:
•Procesos/hilos.
•Arquitecturas.
•Redes
•Protocolos de comunicación
•Datos.
Clasificación de la computación distribuida
Tomado de The Distributed Computing Paradigms (Brijender Kahanwal y Tejinder Pal Singh )
Peer-to-Peer computing
P2P network						Server based network
In a Peer-to-Peer (P2P) system, every node acts as both a client and a server, providing part of the system resources. Peer machines are simply client computers connected to the Internet. All client machines act autonomously to join or leave the system freely. This implies that no master-slave relationship exists among the peers.
Un cluster es una tipo de arquitectura paralela distribuida que consiste de un conjunto de computadoras independientes de bajo costo (interconectadas entre sí por una red de alta velocidad) operando de forma conjunta como un único recurso computacional.
Conceptos Preliminares
Cluster computing
Es un tipo de sistema distribuido (no sujeto a un control centralizado) que permite compartir e integrar recursos distribuidos geográficamente.
Grid computing
Utility computing
Utility computing
Se define como un modelo de negocios para suministrar recursos computacionales (procesamiento, almacenamiento y otros) como un servicio medido y cuando se lo requiera (on-demand)
El “servicio medido” se utiliza en los servicios públicos tradicionales (electricidad, agua, gas natural).
Este sistema tiene la ventaja de tener un costo nulo o muy bajo para adquirir hardware; en cambio, los recursos computacionales son esencialmente alquilados. Los clientes que realizan procesamiento de datos a gran escala o que están frente a un pico de demanda también pueden evitar los atrasos que resultarían de adquirir y ensamblar físicamente una gran cantidad de computadoras.
SERVICE ON DEMAND
METERED SERVICE
COMPUTATIONAL RESOURCES
Utility computing
Es un modelo tecnológico que permite el acceso ubicuo, adaptado (a las necesidades) y bajo demanda en red a un conjunto compartido de recursos de computación configurables compartidos (por ejemplo: redes, servidores, equipos de almacenamiento, aplicaciones y servicios), que pueden ser rápidamente aprovisionados y liberados con un esfuerzo de gestión reducido o interacción mínima con el proveedor del servicio.
Cloud computing
Usos de la Computación Distribuida
Sistemas Operativos Distribuidos – Características
Transparencia: Provee la visión de una sola máquina
(máquina virtual)
•Acceso: a recursos remotos igual que a locales.
•Ubicación:
•Independencia de nombre – ubicación.
•Independencia de máquina – recurso.
•Replicación: Las replicaciones mejoran el rendimiento y la disponibilidad – el uso, nombre y control de replicas debe ser transparente.
•Migración: por rendimiento, seguridad y disponibilidad, los objetos (procesos y/o datos) pueden migrar.
•Heterogeneidad: Soportar diferentes tipos de hardware y software.
Sistemas Operativos Distribuidos – Características
•Concurrencia: cada usuario tiene la impresión de ser el único usuario – así existan muchos.
Escalabilidad: el sistema puede “crecer” sin afectar las actividades de los usuarios.
Seguridad: Protección contra destrucción y usos no autorizados.
Disponibilidad: debe operar todo el tiempo aún bajo fallas (quizás con cierta degradación).
Evitar fallas: usar componentes de calidad.
Tolerar fallas: redundancia de componentes
Detectar y recuperar fallas: usar hardware y software para descubrir y reparar fallas.
Flexibilidad: Facilidad para reemplazar, modificar o agregar componentes.
Rendimiento: Las aplicaciones deben correr mejor (o al menos igual) que en monoprocesadores.
Hechos del Paralelismo
El paralelismo solo era usado para aplicaciones de alto rendimiento (No más)
El cómputo paralelo no se va a detener 
Desarrollar aplicaciones paralelas no es simple
Evaluar el rendimiento en paralelo es complejo
Implicaciones del Paralelismo
Diseño de Computadoras Paralelas
Diseño de Algoritmos Eficientes
Evaluación de Algoritmos Paralelos
Desarrollo de lenguajes de programación Paralelos
Desarrollo de Utilerías de Programación Paralela
Portabilidad de aplicaciones paralelas
Fuentes
Wikipedia
The Distributed Computing Paradigms. Brijender Kahanwal y Tejinder Pal Singh.
STRUCTURED COMPUTER ORGANIZATION. Chapter 8: Parallel Computer Architectures.	Andrew S. Tanenbaum y Todd Austin.
ORGANIZACIÓN Y ARQUITECTURA DE COMPUTADORAS. 
Capitulo 16 : procesamiento paralelo

Continuar navegando