60
Universidad de Cuenca Sistemas Distribuidos José Moyano

Programación Paralela - Conceptos y diseño de sistemas distribuidos

Embed Size (px)

Citation preview

Page 1: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Universidad de CuencaSistemas DistribuidosJosé Moyano

Page 2: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Arquitectura de von Neumann La arquitectura de von Neumann consiste de una memoria

principal, una unidad central de proceso (CPU) y una interconexión entre la memoria y el CPU

La memoria principal esta compuesta por múltiples ranuras, donde cada uno almacena instrucciones y datos

EL CPU esta dividido en la unidad de control y la unidad lógica. La unidad de control decide que instrucción debería ejecutarse en

un programa y la unidad aritmética lógica ejecuta la instrucción elegida.

Las instrucciones y los datos son transmitidos entre el CPU y la memoria vía interconexión.

La separación de la memoria y el CPU es conocido como el cuello de botella de von Neumann

Algunos Antecedentes

Page 3: Programación Paralela - Conceptos y diseño de sistemas distribuidos
Page 4: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Procesos, multitareas e hilos Cuando se ejecuta un programa, el sistema operativo crea una

proceso que será una instancia del programa que esta siendo ejecutado

Un proceso consiste de varias entidades: El programa de lenguaje de máquina ejecutable Un bloque de memoria La descripción de recursos que ocupa el proceso en el sistema

operativo Información de seguridad Información de estado del proceso

Page 5: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Modificaciones del Modelo de von Neumann

Los fundamentos del caching La memoria caché es una colección de posiciones de

memoria a las cuales se puede acceder en menos tiempo Un problema en la cache es decidir qué datos y que

instrucciones deben ser almacenadas en la caché Cuando la CPU escribe datos en una memoria caché, el valor

en la memoria caché y el valor en la memoria principal son diferentes.

Page 6: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Asignaciones de Cache

En un extremo hay una caché totalmente asociativa, en el que una nueva línea se puede colocar en cualquier ubicación en la memoria caché.

El otro extremo hay una caché de asignación directa, en la que cada línea tiene una ubicación única en la caché al que se le asignará.

Page 7: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Memoria Virtual La cache hace que el CPU pueda acceder rápidamente a

instrucciones y datos que se encuentran en la memoria principal. La memoria virtual fue desarrollada para que la memoria

principal puede funcionar como una memoria caché para el almacenamiento secundario

Podemos tener problemas si tratamos de asignar direcciones de memoria física a páginas cuando compilamos un programa.

Numero de paginas virtuales Un inconveniente con el uso de una tabla de páginas es que

puede duplicar el tiempo necesario para acceder a una ubicación en la memoria principal

Page 8: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Paralelismo a nivel de instrucción (ILP)

Pipelining (Canalización) Similar a la fabricación de un vehículo: mientras que un equipo

atornilla el motor, otro equipo se puede conectar a la transmisión del motor, y el tercer equipo puede atornillar el motor al chasis.

Multiple issue (Problema múltiple) Canales que mejoran el rendimiento mediante la adopción de las

piezas individuales de hardware o unidades funcionales y conectándolos en secuencia.

En la especulación, el compilador o el procesador realiza una suposición acerca de una instrucción y, a continuación, ejecuta la instrucción sobre la base de la suposición.

Page 9: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Hardware multihilos

ILP puede ser muy difícil de explotar porque tiene una larga secuencia de estados dependientes y ofrece pocas oportunidades.

Paralelismo a nivel de hilo (TLP) Proporcionar paralelismo a través de la ejecución simultánea

de diferentes hilos, por lo que proporciona un paralelismo de más grueso que ILP.

Page 10: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Hardware multihilos

Hardware multihilos proporciona un medio para que los sistemas sigan haciendo

un trabajo útil, cuando la tarea que se está ejecutando actualmente ha sido llamada.

Multihilos fine-grained el procesador cambia entre las discusiones después de cada

instrucción, saltándose las discusiones que se estancaron. Multihilos simultáneos (SMT)

Intenta explotar procesadores superescalares al permitir que múltiples hilos para hacer uso de las múltiples unidades funcionales

Page 11: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Hardware Paralelo

Sistemas Single instruction, multiple data, o SIMD En la computación paralela, la taxonomía de Flynn se utiliza

con frecuencia para clasificar arquitecturas de computadora. Operan en múltiples flujos de datos mediante la aplicación de

un elemento a múltiples elementos de datos, considerándolo un sistema abstracto por tener una sola unidad de control

Page 12: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Sistemas SIMD

Procesadores vectoriales Pueden operar sobre matrices o vectores de datos. Registros vectoriales: son registros capaces de almacenar un

vector de operandos y operaciones simultáneamente en sus contenidos.

Vector y unidades funcionales canalizados: se aplica la misma operación para cada par de elementos en los dos vectores correspondientes.

Instrucciones vectoriales: Estas son las instrucciones que operan sobre vectores en lugar de escalares.

Page 13: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Sistemas SIMD Procesadores vectoriales

Memoria intercalada: El sistema de memoria consiste en múltiples "bancos" de la memoria, que se puede acceder independiente.

Acceso a la memoria strided y hardware scatter/gater: el programa accede a los elementos de un vector situado a intervalos fijos.

Unidades de procesos gráficos Convierten la representación interna, en una matriz de píxeles

que puede ser enviado a una pantalla de ordenador. Mantienen altas tasas de movimiento de datos con el fin de

evitar los puestos de acceso a memoria.

Page 14: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Unidades de procesamiento de Gráficos (GPU)

Usan una canalización de procesamiento de gráficos para convertir la representación interna en una matriz de píxeles que puede ser enviado a una pantalla de ordenador.

El comportamiento de las etapas programables se especifica mediante funciones llamadas funciones de sombreado.

Funciones de sombreado son paralelos implícitamente, ya que se pueden aplicar a varios elementos en el flujo de gráficos.

Page 15: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Unidades de procesamiento de Gráficos (GPU)

El procesamiento de una sola imagen puede requerir grandes cantidades de datos, cientos de megabytes de datos para una sola imagen no es inusual.

Los GPU necesitan mantener altas tasas de movimiento de datos, y con el fin de evitar los puestos de acceso a memoria, dependen en gran medida de multithreading de hardware; algunos sistemas son capaces de almacenar el estado de más de un centenar de hilos suspendidos por cada hilo de ejecución.

Los GPU no son sistemas SIMD puros. Aunque la ALU en un núcleo determinado hacer paralelismo utilizado SIMD

Page 16: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Sistemas MIMD

Multiple instruction, multiple data o MIMD Soportan múltiples flujos de instrucción simultáneas que

operan en múltiples flujos de datos. Sistemas de memoria compartida:

Utilizan uno o más procesadores multinúcleo. En los sistemas de memoria compartida con varios

procesadores multi-núcleo, la interconexión puede o bien conectar todos los procesadores directamente a la memoria principal o cada procesador puede tener una conexión directa a un bloque de memoria principal

Page 17: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Sistemas MIMD

Sistemas de memoria distribuida Los sistemas de memoria distribuida más ampliamente

disponibles son llamados clusters. La red proporciona la infraestructura necesaria para convertir

grandes redes de ordenadores distribuidos geográficamente en un sistema de memoria distribuida unificada

Page 18: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Sistemas de memoria Compartida

Los sistemas de memoria compartida utilizan uno o más procesadores multinúcleo.

Page 19: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Sistemas de memoria Compartida En los sistemas de memoria compartida puede conectar todos los

procesadores directamente a la memoria principal Cada procesador puede tener una conexión directa a un bloque de

memoria principal Los procesadores pueden acceder a bloques de memoria principal de los

demás a través de hardware especial Sistemas UMA son más fáciles de programar, ya que el programador no

tiene que preocuparse acerca de los diferentes tiempos de acceso a diferentes posiciones de memoria.

Esta ventaja puede ser compensado por el acceso más rápido a la memoria conectado directamente en los sistemas NUMA.

Los sistemas NUMA tienen el potencial de utilizar mayores cantidades de memoria que los sistemas de UMA.

Page 20: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Sistemas de Memoria Distribuida

Se componen de una colección de productos básicos de sistemas, por ejemplo, PCs conectados por una red para la interconexión de los productos básicos

son sistemas de memoria compartida con uno o más procesadores de múltiples núcleos.

Page 21: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria compartida Bus de Interconexión:

El bus es un conjunto de cables de comunicación en paralelo junto con un poco de hardware que controla el acceso al bus

La característica clave de un bus es que los cables de comunicación son compartidos por los dispositivos que están conectados a él

Los buses tienen la virtud de bajo coste y la flexibilidad; múltiples dispositivos pueden ser conectados a un bus con poco coste adicional.

Si conectamos un gran número de procesadores a un bus, es de esperar que los procesadores con frecuencia tendrían que esperar el acceso a la memoria principal.

Page 22: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria compartida Interconexión Conmutada utilizan interruptores para controlar el

enrutamiento de los datos entre los dispositivos conectados. Con interruptores y al menos tantos módulos de memoria como procesadores,

sólo habrá un conflicto entre dos núcleos que intentan acceder a la memoria si los dos núcleos intentan acceder simultáneamente el mismo módulo de memoria.

Los Crossbars permiten la comunicación simultánea entre diferentes dispositivos, por lo que son mucho más rápidos que los bus.

El costo de los conmutadores y enlaces es relativamente alta. Un sistema basado en bus pequeña será mucho menos caro que un sistema

basado en el crossbars del mismo tamaño.

Page 23: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria distribuida Se dividen en dos grupos: las interconexiones directas e interconexiones

indirectos En una interconexión directa cada interruptor está conectado directamente a

un par procesador de memoria Los conmutadores están conectados el uno al otro. Un anillo es superior a una simple bus ya que permite múltiples

comunicaciones simultáneas. Es fácil de diseñar esquemas de comunicación en el que algunos de los

procesadores deben esperar a que otros procesadores para completar sus comunicaciones.

Page 24: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión Interconexiones de memoria distribuida

La malla toroidal será más caro que el anillo, ya que los interruptores son más complejos, que deben apoyar cinco enlaces en lugar de tres, y si hay p procesadores, el número de enlaces es 3p en una malla toroidal, mientras que es sólo 2p en un anillo.

El número de posibles patrones de comunicaciones simultáneas es mayor con una malla que con un anillo.

Page 25: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria distribuida Una medida de "número de comunicaciones simultáneas" y

"conectividad" es el ancho de bisección. El sistema paralelo se divide en dos mitades y cada mitad contiene

la mitad de los procesadores o nodos. (a) hemos dividido un anillo con ocho nodos en dos grupos de cuatro

nodos, y podemos ver que sólo dos comunicaciones pueden tener lugar entre las mitades

(b) hemos dividido los nodos en dos partes para que cuatro comunicaciones simultáneas puede tener lugar

Page 26: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria distribuida Ancho de banda bisección se utiliza a menudo como una medida de

la calidad de la red.

Page 27: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión Interconexiones de memoria distribuida

La interconexión directa ideal es una red totalmente conectada en el que cada conmutador está conectado directamente a cada otro interruptor

Su ancho de bisección es p2 = 4. No es práctico la construcción de una interconexión para sistemas

con pocos nodos, ya que requiere un total de p2 = 2CP = 2 enlaces Cada interruptor debe ser capaz de conectarse a enlaces p. Es una "mejor teórica posible" interconexión

que uno práctico, y se utiliza como base para la evaluación de otras interconexiones.

Page 28: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria distribuida El hipercubo es una interconexión directa altamente conectadas que

se ha utilizado en los sistemas reales Hipercubos se construyen inductivamente: un hipercubo unidimensional es un sistema plenamente conectado

con dos procesadores. Un hipercubo bidimensional está construido a partir de dos

hipercubos unidimensionales al unirse a los interruptores "correspondiente“

un hipercubo de dimensión d tiene nodos 2D p D, y un interruptor en un hipercubo d-dimensional está conectado directamente a un procesador y los interruptores de d

Page 29: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria distribuida El ancho de bisección de un hipercubo es p = 2, por lo que cuenta con más

conectividad que un anillo o malla toroidal, pero los interruptores debe ser más potente, ya que deben soportar 1CD D 1 Log2.p/ cables, mientras que la malla cambia sólo requieren cinco cables.

Page 30: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria distribuida Interconexiones indirectos proporcionan una alternativa a las interconexiones

directas. En una interconexión indirecta, los interruptores no pueden ser directamente

conectado a un procesador. A menudo son mostrados con enlaces unidireccionales y una colección de

procesadores, cada uno de los cuales tiene un saliente y un enlace de entrada, y una red de conmutación.

Page 31: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Redes de interconexión

Interconexiones de memoria distribuida En una red de omega, los interruptores son de dos por dos crossbars Hay comunicaciones que no pueden ocurrir simultáneamente. La red omega es menos costoso que el crossbars. La red utiliza omega 1 2 log2.p / de los conmutadores 2x2 crossbars, por lo

que utiliza un total de 2p log2.p / interruptores, mientras que el crossbars utiliza p2.

Page 32: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Latencia y ancho de banda

Cualquier dato de tiempo es transmitido, interesando el tiempo que tomará para que los datos llegan a su destino.

Esto se da si hablamos de la transmisión de datos entre la memoria principal y la memoria caché, caché y registro, disco duro y la memoria, o entre dos nodos de una memoria distribuida o sistema híbrido.

Hay dos figuras que se utilizan a menudo para describir el comportamiento de una interconexión: la latencia y el ancho de banda.

La latencia es el tiempo que transcurre entre el inicio de la fuente para transmitir los datos de partida y de destino para recibir el primer byte.

El ancho de banda es la velocidad a la que el destino recibe los datos después de que ha comenzado a recibir el primer byte.

message transmission time = l + n / b

Page 33: Programación Paralela - Conceptos y diseño de sistemas distribuidos

La coherencia de caché

Recordemos que las cachés del CPU son gestionados por el hardware del sistema: Los programadores no tienen control directo sobre ellos. Esto tiene varias consecuencias importantes para los

sistemas de memoria compartida. Supongamos que tenemos un sistema de memoria

compartida con dos núcleos, cada uno de los cuales tiene su propia caché de datos privado.

Mientras los dos núcleos de sólo lectura de datos compartidos, no hay ningún problema.

Este comportamiento impredecible ocurrirá independientemente de si el sistema está utilizando una escritura simultánea o una política write-back.

Page 34: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Revisando la coherencia de caché

Page 35: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo

Advertencias Mientras que el uso de la GPU como una plataforma para la computación

paralela continúa creciendo a un ritmo rápido Las interfaces de programación de aplicaciones (API) para las GPU son

necesariamente muy diferentes de APIs estándar MIMD. Nos centraremos principalmente en lo que a menudo se llama programa

único, múltiples datos o SPMD. En lugar de ejecutar un programa diferente en cada núcleo, programas SPMD

consisten en un solo ejecutable que puede comportarse como si fuera varios programas diferentes a través del uso de saltos condicionales.

Recordemos que un programa es paralelo si se obtiene su paralelismo dividiendo las tareas entre los hilos o procesos.

Page 36: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo

Coordinar los procesos / hilos Dividir el trabajo entre los procesos / hilos

Cada proceso / hilo obtiene aproximadamente la misma cantidad de trabajo

Se minimiza la cantidad de comunicación necesaria Se encargará de los procesos / hilos para sincronizar. Se encargará de la comunicación entre los procesos / hilos.

Page 37: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo

Memoria Compartida Threads dinámicos y estáticos

Muchos entornos de programas de memoria compartida utilizan hilos dinámicos.

En este paradigma, a menudo hay un hilo principal y en un momento dado una colección de subprocesos de trabajo.

El hilo principal normalmente espera a peticiones- trabajo Este paradigma hace un uso eficiente de los recursos del sistema ya que

los recursos que se requieren de un hilo solamente se utilizan mientras que el hilo se ejecuta realmente.

Page 38: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo

Memoria Compartida Threads dinámicos y estáticos

Una alternativa al paradigma dinámico es el paradigma hilo estática. En este paradigma, todos los hilos están bifurcadas después de cualquier

configuración que necesita el hilo principal y los hilos de correr Si un hilo está inactivo, sus recursos no puede ser liberados. Tiene la virtud de que está más cerca del paradigma más utilizado para la

programación de memoria distribuida

Page 39: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo Memoria Compartida

No determinismo En cualquier sistema MIMD en la que los procesadores ejecutan de forma

asíncrona es probable que no habrá no determinismo. Un cálculo es no determinista si una entrada dada puede dar lugar a

diferentes salidas. Si varios subprocesos se ejecutan de forma independiente, la tasa relativa

a la que van a completar declaraciones varía de ensayo a ensayo. El mecanismo más comúnmente utilizado para asegurar la exclusión

mutua es un bloqueo de exclusión mutua o mutex o de bloqueo. Un mutex es un tipo especial de objeto que tiene apoyo en el hardware

subyacente. La idea básica es que cada sección crítica está protegido por una

cerradura. Antes de que un hilo puede ejecutar el código en la sección crítica.

Page 40: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo Memoria Compartida

Hilo de seguridad Los programas paralelos pueden llamar funciones desarrolladas

para su uso en programas de serie Una variable estática que se declaró en una función persiste de

una llamada a otra. Una función como strtok no es seguro para subprocesos. Esto significa que si se utiliza en un programa de multiproceso,

puede haber errores o resultados inesperados. Cuando un bloque de código no es hilo de seguridad, por lo

general es debido a diferentes hilos están accediendo a los datos compartidos.

Page 41: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo Memoria Distribuida

Paso de mensajes Es un API de paso de mensajes proporcionando un envío y una

función de recepción. Primera nota de que el segmento de programa es SPMD. Los dos procesos están utilizando el mismo ejecutable En segundo lugar, tenga en cuenta que el mensaje variable se

refiere a los diferentes bloques de memoria en los diferentes procesos.

Los programadores a menudo enfatizan mediante el uso de nombres de variables tales como mi mensaje o mensajes local.

Page 42: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo

Memoria Distribuida Paso de mensajes

Implementaciones de las API de paso de mensajes permiten que todos los procesos de acceso a stdout y stderr permiten escribir en la salida estándar

Paso de mensajes es una muy poderosa y versátil API para el desarrollo de programas paralelos.

Las estructuras de datos en el programa pueden tener que tampoco ser replicado por cada proceso o distribuirse de forma explícita entre los procesos.

Page 43: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo Memoria Distribuida

Comunicación Unilateral En paso de mensajes, un proceso, debe llamar a una función de

envío y el envío debe ir acompañado por otro proceso "llamar a una función de recepción.

Toda comunicación requiere la participación explícita de los dos procesos.

En la comunicación de un solo lado, o acceso a la memoria remota, un solo proceso llama a una función, que actualiza la memoria, con un valor de otro proceso o memoria remota con un valor en el proceso de llamada.

Page 44: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo Memoria Distribuida

Idiomas de espacio de direcciones mundial con particiones Varios grupos están desarrollando lenguajes de programación en

paralelo que permiten al usuario utilizar técnicas de memoria compartida para el hardware de programación distribuida

Si simplemente escribimos un compilador que trata las memorias colectivas en un sistema de memoria distribuida como una sola memoria de gran tamaño, nuestros programas tendrían pobres, o, en el mejor, el rendimiento impredecible

PGAS proporcionan algunos de los mecanismos de los programas de memoria compartida.

Page 45: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Software Paralelo Memoria Distribuida

Sistemas híbridos de programación Es posible programar los sistemas tales como grupos de

procesadores multinúcleo utilizando una combinación de una API de memoria compartida en los nodos y una API de memoria distribuida para la comunicación de los entrenudos.

Esto por lo general sólo se realiza para los programas que requieren los más altos niveles de rendimiento, ya que la complejidad de esta API "híbrido" hace que el desarrollo de programas extremadamente difícil.

Page 46: Programación Paralela - Conceptos y diseño de sistemas distribuidos

ENTRADA Y SALIDA

Funciones printf, fprintf, scanf, fscanf son funciones usadas para mostrar en la pantalla estándar.

Cuando llamamos a printf de múltiples procesos nos gustaría que la salida aparece en la consola de un solo sistema, el sistema en el que comenzó el programa.

Page 47: Programación Paralela - Conceptos y diseño de sistemas distribuidos

ENTRADA Y SALIDA Con el fin de abordar parcialmente esas cuestiones, vamos a estar

haciendo estas suposiciones y siguiendo estas reglas cuando nuestros programas paralelos tienen que hacer E / S: En los programas de memoria distribuida, único proceso 0 accederá stdin. En

los programas de memoria compartida, sólo el hilo principal o hilo 0 accederán stdin.

En ambos programas de memoria distribuida y de memoria compartida, todos los procesos / hilos pueden acceder a stdout y stderr.

Debido a la orden no determinista de salida a la salida estándar, en la mayoría de los casos sólo un único proceso / hilo se utilizará para toda la salida a la salida estándar.

Sólo un proceso individual / hilo intentará acceder a cualquier archivo única stdin, stdout o stderr.

Page 48: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Rendimiento Aceleración y Eficiencia

Lo mejor que podemos hacer es dividir por igual el trabajo entre los núcleos Si tenemos éxito en hacer esto, y corremos nuestro programa con núcleos p,

un hilo o proceso en cada núcleo, entonces nuestro programa paralelo se ejecutará p veces más rápido que el programa de serie.

Así que si definimos la aceleración de un programa paralelo como:

S=aceleración T=tiempo

Page 49: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Rendimiento Aceleración y Eficiencia

E=eficiencia P=rendimiento

Page 50: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Rendimiento Aceleración y Eficiencia

Está claro que Tparallel, S y E dependen de p, el número de procesos o hilos. También tenemos que tener en cuenta que Tparallels, E y Tserial todos

dependen del tamaño del problema. Si Toverhead denota esta sobrecarga en paralelo, es a menudo el caso de

que:

Page 51: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Rendimiento Velocidad y Eficiencia

Page 52: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Rendimiento Amdahl’s law

Dice que a menos que la práctica de un programa en serie se paraleliza, la posible aceleración va a ser muy limitado, independientemente de la cantidad de núcleos disponibles.

Ejemplo: Si somos capaces de paralelizar el 90% de un programa en serie:

Tserial =20s 0.9 X Tserial/p=18/p0.1 X Tserial=2

Aceleración es:

Page 53: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Rendimiento Amdahl’s law

Por consiguiente, la fracción S debe ser menor que:

Es decir, S <=10. Esto es decir que a pesar de que hemos hecho un trabajo perfecto en la paralelización 90% del programa, e incluso si tenemos, digamos, 1000 núcleos, vamos a no conseguir un aumento de velocidad mejor que 10.

Page 54: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Rendimiento Escalabilidad

La palabra "escalable" tiene una amplia variedad de usos informales. En términos generales, una tecnología es escalable si se puede manejar cada

vez mayores tamaños de problemas. En las discusiones sobre el desempeño del programa paralelo, escalabilidad

tiene una definición algo más formal. Supongamos que ejecutamos un programa paralelo con un número fijo de

procesos / hilos y un tamaño de entrada fija, y obtenemos una eficiencia E. Supongamos que ahora aumentamos el número de procesos / hilos que son

utilizados por el programa. Si podemos encontrar una tasa correspondiente de aumento en el tamaño del

problema para que el programa siempre tiene la eficiencia E, entonces el programa es escalable.

Page 55: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Rendimiento Escalabilidad

Suponiendo que Tserial = n, también suponemos que Tparalelo = n/p +1

Hacerle un cuadro de tendencia con el ejemplo incrementando p; y cambiando el tiempo serial y cambiando el porcentaje de paralelización

Page 56: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Diseño de Programas Paralelos

La metodología de Foster Particiones. Divide el cálculo a realizar y los datos operados por el cálculo en

tareas pequeñas. El objetivo aquí debe ser en la identificación de las tareas que se pueden ejecutar en paralelo.

Comunicación. Determine lo que la comunicación debe ser llevado a cabo una de las tareas identificadas en el paso anterior.

Aglomeración vs agregación. Combinar las tareas y las comunicaciones señaladas en el primer paso en tareas más grandes

Mapeo. Asignar las tareas compuestos identificados en el paso anterior para procesos / hilos.

Page 57: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Diseño de Programas Paralelos

Un programa de serie Es bastante sencillo escribir un programa en serie que genera un histograma.

Tenemos que decidir lo que los contenedores son, determinar el número de mediciones en cada bandeja, e imprimir las barras del histograma

1. el número de mediciones, data_count 2. una serie de data_count flotadores, los data; 3. El valor mínimo para el bin que contiene los valores más pequeños,

min_meas; 4. el valor máximo para el depósito que contiene los valores más grandes,

max_meas; 5. el número de contenedores, bin_count;

Page 58: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Diseño de Programas Paralelos

Paralelización del programa de serie Si asumimos que el data_count es mucho mayor que el bin_count, a

continuación, incluso si utilizamos búsqueda binaria en la función find_bin, la gran mayoría de los trabajos en este código será en el circuito que determina los valores de recuentos de intervalos.

Por tanto, el enfoque de nuestra paralelización debería estar en este bucle, y vamos a aplicar la metodología de Foster a la misma. Lo primero a destacar es que los resultados de los pasos de la metodología de Foster son de ningún modo determinado de forma única, por lo que no debería sorprenderse si en cualquier etapa a llegar a algo diferente.

Page 59: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Metodología de Foster

Consiste en un conjunto de tareas que pueden interactuar entre sí enviando mensajes a través de canales.

Una tarea es un programa, su localidad de memoria y puertos de I/O. Un canal es una cola de mensajes que conecta el puerto de salida de

una tarea con el puerto de entrada de otra. El envío es una operación asíncrona mientras que la recepción es una

operación síncrona.

Page 60: Programación Paralela - Conceptos y diseño de sistemas distribuidos

Escribir y ejecutar programas paralelos En los sistemas de memoria compartida más pequeños, hay una sola

copia en ejecución del sistema operativo En estos sistemas, los programas de memoria compartida por lo general

se pueden iniciar utilizando un IDE o la línea de comandos. Una vez iniciado, el programa suele utilizar la consola y el teclado para

la entrada de la entrada estándar y la salida a stdout y stderr. En los sistemas más grandes, puede haber un programador por lotes, es

decir, un usuario solicita un cierto número de núcleos, y especifica la ruta de acceso al archivo ejecutable y donde la entrada y salida deben ir.

En los sistemas de memoria distribuida e híbridos típicos, hay un equipo host que es responsable de la asignación de nodos entre los usuarios.