Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Multiprocesadores Unidad 4: Primera Parte Ing. Carlos A. Afranllie Introducción Los uniprocesadores incorporaron soporte hardware para explotar los diferentes niveles de paralelismo y mejorar el rendimiento de las aplicaciones: • Paralelismo a nivel de instrucción (ILP) • Paralelismo a nivel de datos (DLP) • Paralelismo a nivel de threads (TLP) Introducción Los speedups alcanzados en estas aplicaciones no han sido significativamente grandes, ya sea por motivos tecnológicos o bien por las necesidades concretas de las aplicaciones. Se crean sistemas de computación más grandes aprovechando la mejora tecnológica y combinando múltiples uniprocesadores, los cuales pueden aplicar o no la misma instrucción sobre múltiples datos. Introducción A los sistemas que aplican una misma instrucción a multiples datos se les llama computadores SIMD y, en el caso que apliquen diferentes instrucciones a los datos, reciben el nombre de MIMD. Las máquinas SIMD dieron respuesta a aplicaciones científicas y de ingeniería que realizaban operaciones sobre estructuras muy regulares, como pueden ser arrays o vectores. Clasificación • Arquitecturas paralelas SIMD o Array processors o Vector processors • Multiprocesadores o UMA o NUMA o COMA • Multicomputadores o MPP o Clusters computers Arquitecturas paralelas SIMD Los computadores paralelos array processors y vector processors son los más conocidos. • Array Processors: Aplican una misma operación (instrucción) sobre una secuencia de datos, ya sea teniendo una serie de procesadores o unidades funcionales que operan a la vez. • Vector processors: Una unidad funcional que opera secuencialmente sobre una secuencia de datos. Arquitecturas paralelas SIMD Array processors • Consisten en un gran número de procesadores idénticos que realizan la misma secuencia de instrucciones en datos diferentes. • Cada procesador, en paralelo con el resto de procesadores, realiza la misma instrucción sobre los datos que le toca procesar. • El primer array processor fue el computador ILLIAC IV de la Universidad de Illinois. Array Processors Arquitectura clásica de un Array Processors Array Processors Array Processors con Memoria Compartida Array Processors Array Processors con Memoria Distribuída Arquitecturas paralelas SIMD Vector processors • Desde el punto de vista del programador, son lo mismo que los computadores array processors. • El procesamiento de los datos no se hace en paralelo. • Los datos son procesados por una única unidad funcional muy segmentada. • La empresa que más vector processors ha realizado es Cray Research. • La primera máquina fue la Cray-1. Vector Processors Diagrama de bloque de un Vector Processors Vector Processors Arquitectura de un Vector Processors Arquitecturas Paralelas MIMD Computadores MIMD son múltiples procesadores que no necesariamente tienen que realizar la misma instrucción u operación sobre los datos. • Memoria compartida o Multiprocesadores (fuertemente acoplados) • Memoria distribuida o Multicomputadores (débilmente acoplados) Multiprocesadores Los multiprocesadores más conocidos son los llamados symetric multiprocessors o SMP, que se caracterizan por ser todos los procesadores del mismo tipo y poder acceder de la misma forma a los sistemas de memoria y entrada/salida. Multiprocesadores • Los multiprocesadores tienen un espacio virtual de direcciones de memoria común. • Pueden acceder a cualquier posición de la memoria. • Se pueden comunicar simplemente a través de variables compartidas, facilitando así la programación. Multiprocesadores Multiprocesador de memoria compartida sin caché (izquierda) y con caché (derecha). Multiprocesadores Clasificación Las arquitecturas multiprocesador pueden clasificarse según la estrategia de distribución de la memoria compartida, siempre con un único mapa de memoria: • UMA (o SMP): Uniform Memory Access (o Symetric MultiProcessor) • NUMA: Non Uniform Memory Access • COMA: Cache Only Memory Architecture Características: • Memoria física uniformemente compartida por todos los procesadores. • Cada procesador puede emplear una caché privada. • Todos los procesadores son similares y tienen capacidades equivalentes. UMA (SMP) Características: • Todos los procesadores comparten la misma memoria y el mismo espacio de direccionamiento de la misma forma en que un monoprocesador accede a su memoria. • Todos los procesadores presentan el mismo tiempo de acceso a todas las palabras de memoria. • Modelo de programación basado en variables compartidas, aunque es posible simular paso de mensajes. UMA (SMP) Características: • Mecanismos de sincronización para el acceso a recursos comunes. • Los periféricos se comparten de la misma manera. • El principal problema de estos sistemas es la coherencia de la memoria cache. UMA (SMP) UMA (SMP) Multiprocesador de memoria compartida a través de un bus UMA (SMP) Multiprocesador de memoria compartida a través de un bus UMA (SMP) Ejemplo: Características: • Tiempo de acceso depende de la ubicación de la palabra de memoria. • Utiliza (al igual que el SMP) un único espacio de direcciones, pero en este caso cada procesador es dueño de una parte de la memoria, a la cual puede acceder más rápido (memorias locales). • Utiliza pasaje de mensajes escondido. NUMA Características: • El sistema operativo (más sofisticado) puede ayudar mediante migración de páginas. • El problema de coherencia es más complicado. • Coherencia caché con directorios distribuidos. • Sin coherencia de cache, es un multicomputador. NUMA NUMA Multiprocesador NUMA de memoria compartida NUMA Ejemplo: Características: • Caso especial del NUMA. • Cada procesador tiene una parte de la memoria principal que se convierte en caché. • El espacio de memoria completo es la suma de las caches. • No existe una jerarquía de memoria en cada procesador. •Utilizan un mecanismo de directorio distribuido. COMA COMA Ejemplo: • Basadas en bus (son las más fáciles de implementar pero tienen el problema de la contención en los accesos a memoria). • Basadas en una red de interconexión de tipo crossbar (evitan la contención, pero son muy costosas). • Basadas en redes multistage (solución intermedia, menos contención que las basadas en bus, y menos costosas que las crossbar). Conexiones típicas a memoria Basadas en bus: • Formado por un conjunto de conductores para la transacción de datos entre procesadores, módulos de memoria, y dispositivos periféricos conectados al bus. • En el bus sólo puede haber una transacción a un tiempo entre una fuente (master) y uno o varios destinos (workers). • En el caso de que varios masters quieran realizar transacciones, la lógica de arbitraje del bus debe decidir quien será el siguiente que consiga el bus y realice la transacción (se les llama buses de contención o buses de tiempo compartido). Conexiones típicas a memoria Basadas en bus: • En la mayoría de los casos se realiza sobre una placa de circuito impreso. Las tarjetas con los procesadores, memorias, etc. se conectan a este circuito impreso o placa madre a través de conectores o cables. • Bajo costo comparado con otros sistemas de conexión y facilidad de diseño. • Su uso está muy extendido en la industria y existen varios estándares del IEEE disponibles. Conexiones típicas a memoria Basadas en bus: • El multiprocesador basado en bus es uno de los sistemas multiprocesador más utilizados en computadores de prestaciones medias. • El principal problema es su baja escalabilidad lo que no permite tener sistemas con muchos procesadores de forma eficiente. • Dependiendo del ancho de banda del bus y de los requisitos de los procesadores que incorpora, un bus puede albergar entre 4 y 16 procesadores de forma eficiente. Conexiones típicas a memoria Basadas en bus: • Por encima de estos números máximos, quedependen del procesador y el bus, el canal de conexión, en este caso el bus, se convierte en el cuello de botella del sistema. • En sistemas más complejos se sigue utilizando el bus, de manera que para aumentar la escalabilidad del sistema se disponen varios buses formando una jerarquía, o bien, se interconectan varios buses entre sí a través de una red. Conexiones típicas a memoria Conexiones típicas a memoria Multiprocesador de memoria compartida a través de un bus (datos, dirección y control) Basadas en bus: Conexiones típicas a memoria Multiprocesador memoria compartida a través de bus (datos, dirección y control), con caché. Basadas en bus: Conexiones típicas a memoria Una red con bus único (M = Memoria; P = Procesador) Basadas en bus: Conexiones típicas a memoria Redes Híbridas: a) Una red multibus – b) Una jerarquía de dos niveles de buses. Basadas en bus (híbridas): Basadas en crossbar: • El mayor ancho de banda y capacidad de interconexión se consigue con la red de barra cruzada. • Una red de barra cruzada se puede visualizar como una red de una sola etapa de conmutación. • Los conmutadores de cada cruce dan las conexiones dinámicas entre cada par destino-fuente, es decir, cada conmutador de cruce puede ofrecer un camino de conexión dedicado entre un par. Conexiones típicas a memoria Basadas en crossbar: • En una barra cruzada genérica de conmutadores, los elementos V (vertical) y H (horizontal) pueden ser indistintamente procesadores, memorias, etc. • Por ejemplo son típicas las configuraciones de procesador con memoria compartida, donde los módulos verticales son todo procesadores y los horizontales memorias, o al revés. Conexiones típicas a memoria Basadas en crossbar: Conexiones típicas a memoria Basadas en crossbar: • Las redes de barras cruzadas (crossbar) permiten que cualquier procesador del sistema se conecte con cualquier otro procesador o unidad de memoria de tal manera que muchos procesadores pueden comunicarse simultáneamente sin contención. • Es posible establecer una nueva conexión en cualquier momento siempre que los puertos de entrada y salida solicitados estén libres. • Las redes de crossbar se usan en el diseño de multiprocesadores de pequeña escala pero alto rendimiento, en el diseño de routers para redes directas, y como componentes básicos en el diseño de redes indirectas de gran escala. Conexiones típicas a memoria Basadas en crossbar: Conexiones típicas a memoria Multiprocesador de memoria compartida a través de un crossbar, enseñando los dos modos en los que se puede encontrar un switch Basadas en crossbar: Para una red de barras cruzadas con control distribuido, cada punto de conmutación puede estar en uno de los cuatro estados siguientes: Conexiones típicas a memoria Basadas en crossbar: En la figura (a), la entrada de la fila en la que se encuentra el punto de conmutación tiene acceso a la correspondiente salida mientras que las entradas de las filas superiores que solicitaban la misma salida están bloqueadas. Conexiones típicas a memoria Basadas en crossbar: En la figura (b), a una entrada de una fila superior se le ha permitido el acceso a la salida. La entrada de la fila en la que se encuentra el punto de conmutación no ha solicitado dicha salida, y puede ser propagada a otros conmutadores. Conexiones típicas a memoria Basadas en crossbar: En la figura (c), una entrada de una fila superior tiene acceso a la salida. Sin embargo, la entrada de la columna en la que se encuentra en punto de conmutación también ha solicitado esa salida y está bloqueada. Conexiones típicas a memoria Basadas en crossbar: La configuración de la figura (d) sólo es necesaria si el crossbar tiene soporte para comunicaciones multicast (uno a muchos). Conexiones típicas a memoria Basadas en Multistage (MIN) • Las MIN (Multistage Interconnection Networks) se han utilizado tanto en máquinas MIMD como SIMD. • Las redes de interconexión multietapa (MINs) conectan dispositivos de entrada a dispositivos de salida a través de un conjunto de etapas de conmutadores, donde cada conmutador es una red de barra cruzada. • El número de etapas y los patrones de conexión entre etapas determinan la capacidad de encaminamiento de las redes. Conexiones típicas a memoria Basadas en Multistage (MIN) Red de interconexión multistage genérica de P procesadores de entrada y b bancos de memoria de salida. Conexiones típicas a memoria Basadas en Multistage (MIN) • Las MINs fueron inicialmente propuestas por las compañías de teléfonos y posteriormente para los procesadores matriciales. En estos casos, un controlador central establece el camino entre la entrada y la salida. • En casos en donde el número de entradas es igual al número de salidas, cada entrada puede transmitir de manera síncrona un mensaje a una salida, y cada salida recibir un mensaje de exactamente una entrada. • Estas redes pueden configurarse con un número de entradas mayor que el número de salidas (concentradores) y viceversa (expansores). Conexiones típicas a memoria Basadas en Multistage (MIN) • La figura muestra una red multietapa generalizada. • Un número de axb conmutadores se usa en cada etapa. • Entre etapas adyacentes se utiliza una red de interconexión fija. • Los conmutadores pueden ser programados dinámicamente para establecer las conexiones deseadas entre las entradas y salidas. Conexiones típicas a memoria Clasificación de las Redes MIN Dependiendo de la disponibilidad de caminos para establecer nuevas conexiones, las redes multietapa se han dividido tradicionalmente en tres clases: • Bloqueantes • No bloqueantes • Reconfigurables Conexiones típicas a memoria Clasificación de las Redes MIN • Bloqueantes: La conexión entre un par entrada/salida libre no siempre es posible debido a conflictos entre las conexiones existentes. Típicamente, existe un único camino entre cada par entrada/salida, lo que minimiza el numero de conmutadores y los estados. A estas redes bloqueantes también se les denominan multicamino. Conexiones típicas a memoria Clasificación de las Redes MIN • No bloqueantes: Cualquier puerto de entrada puede conectarse a cualquier puerto de salida libre sin afectar a las conexiones ya existentes. Las redes no bloqueantes tienen la misma funcionalidad que un crossbar. Estar redes requieren que existan múltiples caminos entre cada entrada y salida, lo que lleva a etapas adicionales. Conexiones típicas a memoria Clasificación de las Redes MIN • Reconfigurables: Cada puerto de entrada puede ser conectado a cada puerto de salida. Sin embargo, las conexiones existentes pueden requerir de un reajuste en sus caminos. Estas redes también necesitan de la existencia de múltiples caminos entre cada entrada y salida pero el numero de caminos y el costo es menor que en el caso de redes no bloqueantes. Conexiones típicas a memoria Clasificación de las Redes MIN Dependiendo del tipo de canales y conmutadores, las redes multietapa pueden dividirse en dos clases: • MINs unidireccionales: Los canales y conmutadores son unidireccionales. • MINs bidireccionales: Los canales y conmutadores son bidireccionales. Esto implica que la información se puede transmitir simultáneamente en direcciones opuestas entre conmutadores vecinos. Conexiones típicas a memoria MINs unidireccionales: • Los bloques básicos de construcción de una red multietapa unidireccional son los conmutadores unidireccionales. • Un conmutador axb es un crossbar con a entradas y b salidas. • Si cada puerto de entrada puede conectarse a exactamente un puerto de salida, existirán min{a,b} conexiones simultáneas. • Si cada puerto de entrada puede conectarse a varios puertos de salida, se necesita un diseño más complicado para soportar la comunicación multicast (uno a varios). • En el modo de comunicación broadcast (uno a todos), cada puerto puede conectarse a todoslos puertos de salida. Conexiones típicas a memoria MINs unidireccionales: La figura muestra los cuatro posibles estados de un conmutador 2x2. Los últimos dos estados se usan para soportar las comunicaciones uno a muchos y uno a todos. Conexiones típicas a memoria Cuatro posibles estados de un conmutador 2 x 2. MINs bidireccionales: • La figura ilustra un conmutador bidireccional en donde cada puerto está asociado a un par de canales unidireccionales en direcciones opuestas. Esto implica que la información entre conmutadores vecinos puede transmitirse simultáneamente en direcciones opuestas. • Un conmutador bidireccional soporta tres tipos de conexiones: hacia delante, hacia atrás y de vuelta. • Dado que son posibles la conexiones de vuelta entre puertos del mismo lado del conmutador, los caminos tienen diferentes longitudes. Conexiones típicas a memoria MINs bidireccionales: En la figura se muestra una MIN mariposa bidireccional de ocho nodos. Conexiones típicas a memoria MINs bidireccionales: La figura muestra dos caminos alternativos desde el nodo S al nodo D en una BMIN mariposa de ocho nodos. Cuando se cruzan las etapas hacia delante, existen varios caminos. En cada conmutador se puede seleccionar cualquiera de sus puertos de salida. Conexiones típicas a memoria Cuando varios procesadores acceden a un dato para escritura se nos plantea la pregunta siguiente: ¿en qué orden se deben ver estas escrituras por parte del resto de procesadores si éstos hacen una lectura de los datos de forma paralela? Hay muchas respuestas posibles, ya que unos accesos se pueden adelantar a los otros, siendo el resultado de las lecturas impredecible. Todo esto se agrava cuando tenemos cachés, ya que entonces es posible que varios procesadores tengan copias de lecturas previas. Consistencia de memoria • Estos conflictos suceden sólo cuando la memoria es compartida. • Ante la escritura de un programa paralelo se quiere asegurar que una lectura devuelva el valor de una determinada escritura. Es decir, establecer un orden entre una escritura y una lectura. • Normalmente se usa alguna forma de evento de sincronización para asegurar esta dependencia. Consistencia de memoria El acceso a la memoria compartida puede ser visto como un contrato entre el hardware y el software de memoria. Si el software acepta cumplir con ciertas reglas, la memoria conviene en entregar ciertos resultados. La discusión se centra en la naturaleza de las reglas. Estas reglas se denominan “modelos de consistencia”. Consistencia de memoria Modelo de Consistencia: Un modelo de consistencia es el conjunto de normas que nos indica qué valores deberían ver los procesadores en sucesivas lecturas de una o varias posiciones de memoria. “Un modelo de consistencia de memoria especifica cómo se resuelven los conflictos de acceso a la memoria”. Consistencia de memoria Ejemplo 1: CPU-0 escribe ‘1’ en la posición X de la memoria. luego… CPU-1 escribe ‘2’ en la posición X. luego... CPU-2 lee la posición X y obtiene ‘1’ ¿Algo falló? ¡Todo depende de lo que la memoria prometió en su contrato! Consistencia de memoria Ejemplo 2: /* El valor inicial de A y flag es 0 */ P1 P2 A=1 while (flag = 0); /* bucle vacío */ flag=1 print A En particular, estamos suponiendo que la escritura de A es visible para el procesador P2 antes que la escritura a flag, y que la lectura de flag por P2 que hace que salgamos del bucle while se ha completado antes que la lectura de A. Esta ordenación entre los accesos de P1 y P2 no está garantizada por la coherencia, que, por ejemplo, únicamente requiere que el nuevo valor de A se haga visible al procesador P2, no necesariamente antes de que el nuevo valor de flag sea observado. Consistencia de memoria Modelos posibles: A continuación detallaremos algunos de los modelos de consistencia conocidos: • Consistencia estricta • Consistencia secuencial Consistencia de memoria Consistencia estricta: "Cualquier lectura de cierta posición de memoria X devuelve el valor almacenado por la escritura más reciente realizada sobre X" Hay que hacer notar que este modelo de consistencia no se puede implementar en ningún sistema real. Efectivamente, como la distancia entre los procesadores y la memoria no es nula, la señal que viaja entre el procesador que escribe y la memoria sufre un cierto retraso. Consistencia de memoria Si durante este retraso, en el cual la memoria no tiene aún el nuevo dato escrito, otro procesador decide leer, no va a leer el valor que se acaba de mandar a la memoria, que aún no ha llegado, sino el que hubiera anteriormente. Por lo tanto, la única forma en la que se podría implementar este modelo es suponiendo que los datos viajan de forma instantánea (velocidad infinita), lo cual va en contra de la teoría general de relatividad. Consistencia estricta Consistencia secuencial: En presencia de múltiples solicitudes de lectura y escritura, el hardware escoge (de forma no determinista) cierta intercalación de todas las solicitudes, pero todas las CPU perciben el mismo orden. Un multiprocesador es secuencialmente consistente si el resultado de cualquier ejecución es la misma que si las operaciones de todos los procesadores se realizaran en algún orden secuencial, y las operaciones de cada procesador individual ocurren en esta secuencia en el orden especificado por el programa. Consistencia de memoria Ejemplo 1: 1. CPU-1 escribe 100 en posición X 2. 1 ns después: CPU-2 escribe 200 en X 3. 1 ns después: CPU-3 y CPU-4 leen dos veces posición X CPU 1 2 3 y 4 (X)100 (X)200 lee X, lee X (dos veces) Consistencia secuencial Secuencias posibles: E100 E100 E200 E200 L3 = 100 L4 = 200 L3 = 200 E200 E100 L3 = 200 L4 = 200 L3 = 100 L4 = 200 L3 = 200 L4 = 100 L4 = 200 L4 = 200 L3 = 100 CPU 1 2 3 y 4 (X)100 (X)200 lee X, lee X (dos veces) Consistencia secuencial Secuencias posibles: E100 E100 E200 E200 L3 = 100 L4 = 200 L3 = 200 E200 E100 L3 = 200 L4 = 200 L3 = 100 L4 = 200 L3 = 200 L4 = 100 L4 = 200 L4 = 200 L3 = 100 Pase lo que pase, una memoria secuencialmente consistente nunca permitirá que la CPU-3 obtenga (100,200) mientras la CPU-4 obtiene (200,100). Consistencia de memoria “No es importante en qué orden se emiten realmente las operaciones a la memoria o incluso cuándo se completan, lo que importa es que parezcan completarse en un orden que no viole la consistencia secuencial” • Se garantiza que hay un solo ordenamiento global de todas las escrituras que todas las CPU ven igual. • Cuando suceden varias cosas al mismo tiempo, existe un orden verdadero en el que ocurren, tal vez determinados por los tiempos y la casualidad, pero todos los procesadores observan este mismo orden. Consistencia de memoria Existen dos restricciones para la implementación de la consistencia secuencial. • La primera es que las operaciones de memoria de un proceso se hagan visibles en el orden del programa. • El segundo requisito es que las operaciones aparezcan atómicas; es decir, que parezca que una operación se ha completado con respecto a todos los procesos antes que la siguiente operación en el orden total haya sido emitida. Consistencia de memoria Condiciones suficientes para preservar la consistencia secuencial: 1. Todo proceso emite las peticiones a la memoria en el orden especificado por el programa. 2. Después de emitir una operación de escritura, el proceso que la emitió espera ha que se haya realizado la escritura antes de emitir su siguiente operación. 3. Después de emitir una operación de lectura, el proceso que la emitió espera a que la lectura se haya completado, y también espera a que se complete la escritura que generó el valor devuelto por la lectura, antes de emitir su siguiente operación. Consistenciade memoria Multiprocesadores Continuará…
Compartir