Descarga la aplicación para disfrutar aún más
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
Compartir