880 likes | 1.07k Views
Multiprocesadores. Coherencia, Consistencia y Sincronización. Bibliografía D. E. Culler, J.P. Singh. “Parallel Computer Architecture: A Hardware/Software” J.L. Hennesy, D.A. Patterson. “Computer Architecture. A Quantitative Approach” J. P. Shen, M. Lipasti. “Modern processor design”.
E N D
Multiprocesadores Coherencia, Consistencia y Sincronización.
Bibliografía • D. E. Culler, J.P. Singh. “Parallel Computer Architecture: A Hardware/Software” • J.L. Hennesy, D.A. Patterson. “Computer Architecture. A Quantitative Approach” • J. P. Shen, M. Lipasti. “Modern processor design”
Alternativas de implementación (1) Switch Memoria Principal Primer Nivel $ Cache Compartida -Entrelazadas (2-8) (e.g. Alliant FX-8, Encore& Sequent) Mem Mem Pn P1 $ $ Mem Mem Red de Interconexión Escalable Memoria Distribuida (NUMA) Escalabilidad Pn P1 Pn P1 • Bus Compartido • Dance-hall $ $ Red de Interconexión Memoria Compartida (SMP, UMA)
Alternativas de implementación (2) Problemas Coherencia Ancho de Banda limitado SMP basado en Bus Compartido Mayor éxito (multitarea y grano fino) P1 Pn $ $ Bus E/S Memoria • Servidores • Estaciones de trabajo • Bloques de construcción básicos sistemas de gran escala • Soporte en microprocesadores de propósito general
Modelo de programación Match Receive Y , P , t Addr ess Y Send X, Q, t Addr ess X Local pr ocess Local pr ocess addr ess space addr ess space Pr ocess P Pr ocess Q • Memoria compartida ( el más antiguo y extendido ) • Todos los Pc pueden direccionar cualquier posición de memoria • Las comunicaciones son implícitas por “LOAD y STORE”. Los procesos comparten parte de su espacio virtual. • Paso de mensajes • Cada nodo Pc+Memoria+ I/O • Cada Pc solo accede a su memoria privada • Comunicaciones vía mensajes explícitos ( SEND- RECIEVE ). Soporte operaciones de E/S • Las comunicaciones deben aparecer explícitas en el programa
Jerarquía de memoria extendida CPU CPU CPU Replicación: Problema de coherencia Variables Compartidas Jerarquía de Memoria • Ocultar la latencia de los accesos • Incrementar el Ancho de Banda
Problema de la coherencia cache P P P 1 3 2 Load U Load U 3 $ U = ? $ U = ? $ U: 5 4 5 U: 5 Store U U: 7 Dispositivos I/O U: 5 Load U 1 2 Load U Memoria Siguen la pista del estado de cualquier bloque de datos compartido para evitar incoherencias Protocolos de coherencia de cache (P1) Load U (P3) Load U (P3) Store U (P1) Load U (P2) Load U
Soluciones de Grano Grueso (1) L2 MMu DL1 DMA Memoria Controlador I/O • Problemas de coherencia en uniprocesadores • Operaciones de E/S a través de dispositivos DMA: • Salida de dato obsoleto (cache post-escritura) • Entrada de dato que no tenga efecto (acierto de cache)
Soluciones de Grano Grueso (2) • Soluciones uniprocesador • Evitar usar la cache • Segmentos de memoria involucrados en E/S se marcan como “No-Cacheables” • Sacar de la cache antes de E/S (SO) • Páginas de memoria involucradas se vuelcan previamente a memoria (flush) • Usar la cache para E/S • Tráfico de E/S pasa por todos los niveles de la jerarquía de memoria.
Soluciones de Grano Grueso (3) • En multiprocesadores • La escritura o lectura de variables compartidas es un evento frecuente. • No es práctico: • Deshabilitar la cache para datos compartidos • Invocar al SO en cada referencia a una variable compartida Solución: Proveer coherencia de memoria
Sistema de Memoria Coherente (1) ¿Qué significa que un sistema de memoria es coherente? (Definición menos formal) Una operación de lectura retorna siempre el último valor que fue escrito en la posición de memoria correspondiente, independientemente del procesador que efectúa la lectura o la escritura
Sistema de Memoria Coherente (2) Orden hipotético • Definición formal (Sistema Coherente) • Si para • El resultado de cualquier ejecución de un programa • Cualquier posición de memoria (U) • Es posible construir una ordenación secuencial consistente con los resultados de la ejecución, y tal que: • Operaciones de un procesador Ordenadas en secuencia en orden en que son emitidas a sistema de memoria • Valor devuelto por load Valor escrito por el último store Px: Load U Py: Load U . . . Px:Store U Pz: Load U U
Sistema de Memoria Coherente (3) Escrituras visibles a todos los procesadores Todas las escrituras a una posición de memoria deben verse en el mismo orden por todos los procesadores Implícito: Propagación + Serialización de escrituras
Políticas para mantener la coherencia (1) Políticas para mantener la coherencia Invalidación en Escritura Actualización en Escritura
Políticas para mantener la coherencia (2) • Invalidación en Escritura / Coherencia Dinámica • Al escribir en un bloque se invalidan todas las otras copias • Múltiples lectores, un solo escritor • Escrituras consecutivas a un bloque (no palabra) desde el mismo procesador se realizan localmente • No hay copias • Una transacción por bloque • Fallo de Lectura • Escritura-Directa (write-through): • la memoria esta siempre actualizada • Post-Escritura (write-back): • búsqueda en caches remotas (snoop) para encontrar el ultimo valor • Ejemplo del H&P
Políticas para mantener la coherencia (3) • Actualización en Escritura • Al escribir en un bloque se actualizan todas las copias • Escritura directa (write-through), pocos procesadores • Escrituras consecutivas requieren múltiples actualizaciones (write merge) • Fallo de Lectura • Se busca en la memoria siempre esta actualizada • Ejemplo del H&P
Políticas para mantener la coherencia (4) • Tipo de protocolo • Broadcast eficiente • Las operaciones de invalidación o actualización se pueden enviar de forma simultánea a todos los controladores. • En otro caso • La actualización se envía únicamente a aquellas caches que tienen una copia del bloque. Buses: Protocolo Snoopy Observación del Bus Protocolos Basados en Directorio Se indica en qué caches existe copia y en qué estado
Procolos Snoopy (1) State Tag Datos CPU Bus Transacciones Relevantes ° ° ° Ld/St Controlador de Cache + CACHE Sólo es necesario extender la funcionalidad del controlador de cache • Espionaje el bus
Procolos Snoopy (2) • El controlador de cache puede por tanto: • Recibir peticiones del procesador, examinar el estado de la cache, y emitir una petición al bus • Espiar las peticiones que aparecen en el bus, y reaccionar a aquellas que afecten a la cache que controla • Realmente, la comprobación del controlador es la misma comparación (tag-match) que se hace cuando llega petición del procesador • Por todo esto, el hardware de multiprocesadores de memoria compartida por bus, es muy adecuado para los protocolos snoopy, pues requiere muy pocos cambios • Hacer ejemplo 5-2, pg. 267 de Culler
Procolos Snoopy (3) • Uniprocesador: • Protocolo de la cache: Algoritmo formado por máquinas de estado que cooperan. Define: • Conjunto de estados (Cada bloque de memoria tiene un estado asociado) • Diagrama de transición de estados • Acciones asociadas a cada transición • Los Cambios de Estado son provocados por: • Operaciones de memoria efectuadas por el procesador: Devuelve el dato, y si no lo tiene, accede a memoria. S1 Acciones asociadas S2 Estado de un bloque en MEMORIA
Procolos Snoopy (4) • Multiprocesador: • Protocolo Snoopy (basado en espionaje del bus): Algoritmo formado por máquinas de estado que cooperan. Define: • Conjunto de estados (Cada bloque de memoria tiene un estado asociado a cada procesador) • Diagrama de transición de estados • Acciones asociadas a cada transición • Los Cambios de Estado son provocados por: • Transacciones del bus relevantes: Actualiza su estado, y posiblemente ayuda a completar la transacción. • Operaciones de Memoria efectuadas por el procesador local: Devuelve el dato, y posiblemente genera una nueva transacción del bus. S1 Acciones asociadas p1 p2 pN S2 Vector de Estados de un bloque en MEMORIA
Protocolo Snoopy de 2 Estados (1) Lectura / -- Escritura / Memoria V Fallo Lectura / Memoria I Escritura / Memoria • Un único nivel de cache. • Escritura Directa (write-through) • Sin Asignación en Escritura (write non-allocate) • Política de Invalidación • Diagrama de Estados en Uniprocesador • Inicial : bloques inválidos • Lectura : Inválido Válido • Puede generar reemplazamiento • Escritura : no cambia el estado
Protocolo Snoopy de 2 Estados (2) • Un único nivel de cache. • Escritura Directa (write-through) • Sin Asignación en Escritura (write non-allocate) • Política de Invalidación PrRd / -- PrWr / BUS_Wr V • Diagrama de Estados en Protocolo Snoopy • Lecturas: PrRd • Escrituras: PrWr • Transacciones del BUS: • BUS_Rd • BUS_Wr Pr_Rd / BUS_Rd BUS_Wr /-- I Ejemplo de folios PrWr / BUS_Wr
Protocolo Snoopy de 2 Estados (3) Supongamos: 1 nivel cache, Write-through, Non-allocate. ¿Es coherente este Protocolo Snoopy de 2 estados? • Asunciones: • Los controladores de cada cache espían el bus Propagación de escrituras • La memoria se ocupa de las operaciones de memoria en el orden en que estas se presentan al bus (arbitraje del bus). • Operaciones de memoria atómicas: Sólo una operación activa al mismo tiempo en el bus. Serialización de escrituras • Operaciones tratadas en el orden en que son emitidas • Valor devuelto por última lectura es el último escrito
Protocolo Snoopy de 2 Estados (4) • Valor devuelto por última lectura es el último escrito: • Los fallos Serializados por el bus • Los aciertos Escrituras serializadas por el bus, pero las lecturas no totalmente serializadas No es problema porque, el valor que tiene la cache lo puso: • La última escritura • El último fallo de lectura de ese procesador Y ambas operaciones estarían también serializadas • Volver sobre el ejemplo de folios
Protocolo Snoopy de 2 Estados (5) • Problema: Ancho de Banda alto (write-through) • Ejemplo: • Procesador a 2000 MHz • CPI = 1 • 15% stores de 8 bytes • 300 Millones de stores por segundo por procesador • 2400 MB/s por procesador • Un bus con un ancho de banda de 10GB/s sólo puede soportar 4 procesadores sin saturarse Solución: utilizar post-escritura (Write-back), más compleja la propagación y serialización…
Recordatorio: caches write-back (1) • Clave para un uso eficiente del ancho de banda del bus: • Post-Escritura (write-back) • Asignación en Escritura (write-allocate) • Diagrama de transición de estados de una cache con Post-Escritura • Tres estados: • Invalido (o no presente) • Válido (clean) • Modificado (dirty) • Dos tipos de accesos a memoria / Transiciones de Bus • Lecturas (BusRd): • Fallo lectura o escritura (asignación en escritura) • PostEscrituras (BusWB): • Reemplazamiento
Recordatorio: caches write-back (2) PrWr/— Acierto Escritura PrRd/— M PrWr/— Acierto Escritura PrWr/BusRd Fallo Escritura Replace/BusWB V PrRd/BusRd Replace/— PrRd/— I • Hacer ejemplo folios
Protocolo MSI: invalidación de 3 estados (1) • Extensión del protocolo de monoprocesador a multiprocesador MSI • Tres estados: • Invalido (o no presente) • Compartido (shared) • Modificado (modified) • Peticiones del procesador • PrRd y PrWr • Transacciones de bus • BusRd Lectura sin intención de modificar el dato. La genera el controlador cuando recibe un PrRd y no tiene dato en cache. • BusRdX Traer dato con intención de modificarlo. Resto de caches invalidan su copia. La genera el controlador cuando recibe PrWr y el dato no está en cache o está pero no está en estado modificado. • BusWB/Flush El controlador vuelca al bus el dato.
Protocolo MSI: invalidación de 3 estados (3) PrWr/— M PrRd/— PrWr/BusRdX • Sólo hay 1 cache con copia válida (la copia de la memoria principal está anticuada) • La exclusividad implica que la cache puede modificar el bloque sin notificárselo a nadie BusRd/ Flush Replace / Flush S BusRdX / Flush PrRd/BusRd PrWr/BusRdX BusRdX/- • El bloque está presente en la cache y no ha sido modificado • La memoria está actualizada • Otras caches adicionales pueden tener copia PrRd/— BusRd/— I Valido: Shared Modificado: Exclusivo Nueva transacción: BusRdx (Lectura con Invalidación)
Protocolo MSI: invalidación de 3 estados (4) I U 5 M 7 S U : 5 S — — I — M P1 P2 P3 3. PrWr U U S 5 BusRdX U I/O Memoria Operación Estado P1 Estado P2 Estado P3 Transacción Datos Bus Suministrados Memoria BusRd P1 Lee U S — S BusRd Memoria P3 Lee U P3 escribe U BusRdX Memoria (BusUpg) (ignorados) P1 Lee U P2 Lee U
Protocolo MSI: invalidación de 3 estados (5) S U S 7 I Flush U BusRd U 7 U : 5 S — — S — S Cache P3 BusRd P1 P2 P3 4. PrRd U U M 7 I/O Memoria Operación Estado P1 Estado P2 Estado P3 Transacción Datos Bus Suministrados Memoria BusRd P1 Lee U S — S BusRd Memoria P3 Lee U P3 escribe U BusRdX I — M Memoria (BusUpg) (ignorados) P1 Lee U P2 Lee U
Protocolo MSI: invalidación de 3 estados (6) U S U S 7 BusRd U U : 7 S — — S S S BusRd Memoria P1 P2 P3 5. PrRd U U S 7 7 I/O Memoria Operación Estado P1 Estado P2 Estado P3 Transacción Datos Bus Suministrados Memoria BusRd P1 Lee U S — S BusRd Memoria P3 Lee U P3 escribe U BusRdX I — M Memoria (BusUpg) (ignorados) S — S Cache P3 P1 Lee U BusRd P2 Lee U
Protocolo MSI: Decisiones de bajo nivel M BusRd/ Envio S BusRd / Envio I • Detalle: Problema Contador compartido • ¿Qué transición hacer cuando se recibe BusRd de un bloque en estado modificado? • La elección depende de las expectativas (patrón de acceso siguiente) • Patrón 1: el procesador “original” vuelve a realizar una lectura del bloque • Patrón 2: el procesador “nuevo” realiza una escritura del bloque • Shared • Patrón 1: acierto de lectura • Patrón 2: invalidación (latencia de escritura) • Inválido • Patrón 1: fallo de lectura • Patrón 2: no es necesaria invalidación Solución Ajuste dinámico
Protocolo MESI: Invalidación de 4 estados (1) I S M • Problema Protocolo MSI • El protocolo MSI no soporta bien Aplicaciones Secuenciales. • Lectura-Modificación de un dato: • 2 transacciones de bus: • BusRd: Trae el bloque a estado Shared • BusRdX: Pasa de S a M, e invalida el resto de copias. BusRd BusRdX
Protocolo MESI: Invalidación de 4 estados (2) • Protocolo MESI • 4 Estados : • (M) Modificado, • (E) Exclusivo, • (S) Compartido e • (I) Inválido • Nuevo estado (Exclusive Clean / Exclusive) • Implica Exclusividad: puede pasarse a (M) sin transacción de bus • No implica Pertenencia: el controlador de cache no debe responder a transacción BusRd, pues memoria actualizada. • Utilizado en muchos procesadores: • Pentium • Power PC 601 • MIPS R4400 (procesador usado en los multiprocesadores de Silicon Graphics)
Protocolo MESI: Invalidación de 4 estados (3) PrWr/ PrRd (S)/ BusRd PrRd/- BusRdX/- PrRd (S) / BusRd BusRd/- M (S): se activa la señal share ! Sólo nuevas transiciones ! BusRdX: Lectura exclusiva E S I
Hacer ejemplo que viene a continuación: • Insistir en OR-cableada • Insistir en ventaja de MESI sobre MSI Ejemplo • Ejemplo de folios
Protocolo MESI: Invalidación de 4 estados (4) U 5 E BusRd U U : 5 E — — Memoria BusRd P1 P2 P3 1. PrRd U Señal shared (S) OR-cableada I/O Memoria Operación Estado P1 Estado P2 Estado P3 Transacción Datos Bus Suministrados P1 Lee U P3 Lee U P3 escribe U P1 Lee U P2 Lee U
Protocolo MESI: Invalidación de 4 estados (5) S U S 5 BusRd U U : 5 E — — S — S BusRd Memoria P1 P2 P3 2. PrRd U U E Señal shared (S) OR-cableada I/O Memoria Operación Estado P1 Estado P2 Estado P3 Transacción Datos Bus Suministrados Memoria BusRd P1 Lee U P3 Lee U P3 escribe U P1 Lee U P2 Lee U
Protocolo MOESI: invalidación de 5 estados (1) • Problema MESI/MSI • Transacción Flush • Además de transferir el bloque a la cache que lo solicita, se actualiza el contenido de la memoria • Podría evitarse esta actualización • Nuevo estado (O) Owned • No es Exclusivo, existen otras copias • Es Propietario, suministra los datos en caso de: • BusRd B • BusRdX B
Protocolo MOESI: invalidación de 5 estados (2) Propiedad O M Validez S E Exclusividad I • Estados • M - Modified (dirty) • O - Owned (dirty y compartido) • E - Exclusive (sin modificar ni compartir) • S - Shared • I - Invalid
Protocolo MOESI: invalidación de 5 estados (3) PrWr/ BusRdX BusRd/ Flush’ BusRdX/ Flush’ M Flush’: se envia el bloque a otra cache O BusRd/Flush’ PrRd/ ― E PrRd/ BusRd S I Nota: solo nuevas transiciones
Problema protocolos invalidación • Problema patrones migratorios • Cuando hay un patrón de acceso migratorio, los protocolos basados en invalidación son ineficientes. • Ejemplo: flag de sincronización Proceso 0 Proceso 1 while(true){ while (flag != 0); do_work_P0() flag=1; } while(true){ while (flag != 1); do_work_P1() flag=0; } ¿Cuantas transacciones son necesarias en un protocolo de invalidación?
Protocolo Dragón: actualización 4 estados (1) E SC Yo y otros pero no la memoria, soy el propietario Potencialmente 2 más procesadores tienen este bloque. La memoria principal no está actualizada y este procesador es responsable de actualizar la memoria principal cuando este bloque sea reemplazado Yo y la memoria El bloque no ha sido modificado y sólo hay una cache con copia Yo, otros y puede que la memoria, pero no soy el propietario Potencialmente 2 o más procesadores tienen este bloque. La memoria principal puede estar o no actualizada Yo y nadie más El bloque ha sido modificado, la memoria no está actualizada y esta es la única copia (Propiedad Exclusiva) SM M NP Solo Memoria Estado Implícito SC: Shared Clean SM: Shared Modified Dragón de Xerox PARC (1984) SunSparcServer (1997) 47
Protocolo Dragón: actualización 4 estados (2) • Eventos Procesador • PrRd / PrWr • PrRdMiss / PrWrMiss • Transacciones del Bus • BusRd / BusWB / Flush • BusUpd (Nueva) • Broadcast de la palabra modifica a todos los procesadores para que se actualicen las copias • Señal S • Para soportar el estado Exclusivo (igual que MESI)
Protocolo Dragón: actualización 4 estados (3) BusRd/— E SC BusRd/— PrRdMiss (S) / BusRd PrRdMiss (S) / BusRd BusRd/Flush SM M BusRd/Flush 49
Protocolo Dragón: actualización 4 estados (4) BusUpd/ Actualización E SC BusUpd/ Actualización PrWr/— PrWrMiss/ BusRd(S);BusUpd PrWrMiss/ BusRd(S); BusUpd PrWr/BusUpd(S) Broadcast de la palabra modifica a todos los procesadores para que se actualicen las caches relevantes PrWr/ BusUpd(S) SM M PrWr/BusUpd(S) PrWr/— PrWr/BusUpd(S) 50