Arquitecturas de Memoria Compartida y Distribuida: Coherencia Caché y Programación MMD

Arquitecturas de Memoria Compartida y Distribuida

Memoria Compartida

  • Extiende el sistema de memoria para soportar múltiples procesadores.
  • La organización es atractiva para:
    • Multiprogramación de alta productividad.
    • Computación paralela (facilidad de programación).
  • La comunicación es implícita: operaciones de lectura/escritura en variables globales.
  • Los accesos a memoria global desde diferentes procesadores no están ordenados.
  • La sincronización permite establecer ordenamientos parciales.
  • La comunicación entre procesos/tareas se realiza mediante la jerarquía de memoria.
  • Es importante eliminar el tráfico de memoria innecesario.

Memoria Distribuida

  • Memoria asociada a cada procesador.
    • Acceso privado.
  • Red de Interconexión.
    • Intercambio de información entre procesadores.
  • Alternativas para la RI:
    • Las mismas que para MMC -> problemas de escalabilidad.
  • Utilizar enlaces punto a punto entre procesadores:
    • Problemas de encaminamiento.
    • Rendimiento = f (topología de la red).

Arquitecturas UMA y NUMA

UMA (Uniform Memory Access)

  • Todos los procesadores tienen igual tiempo de acceso a la Memoria compartida.
  • Todos se conectan a la memoria a través de un bus.
  • La red de interconexión permite soportar un número considerable de procesadores.
  • Debe soportar el tráfico de memoria para resolver TODOS los fallos caché.
  • No debe ser muy profunda la red para no aumentar la latencia.

NUMA (Non-Uniform Memory Access)

  • El tiempo de acceso de cada procesador depende de la ubicación del elemento de proceso y la memoria.
  • La red de interconexión permite soportar un número bastante elevado de procesadores.
  • Debe soportar el tráfico de memoria para resolver sólo los fallos caché que NO corresponden a la memoria local.
  • No debe ser muy profunda la red para no aumentar la latencia.

Imagen

Imagen

Coherencia de Caché

El Problema de la Coherencia de Caché

  • Las cachés juegan un papel clave en el acceso a los datos
    • Reducen la latencia media de acceso.
    • Reducen el ancho de banda medio en el bus.
  • Las cachés privadas en cada procesador introducen un problema
    • Pueden encontrarse copias de la misma variable en diversas cachés.
    • Escrituras por un procesador pueden no hacerse visibles al resto de los procesadores (fallo de comunicación).
    • Esto constituye el problema de la coherencia caché.
  • ¿Cómo resolver el problema de coherencia caché?
    • Organizar la jerarquía de memoria de manera que se elimine el problema.
    • Mantener la jerarquía de memoria e incorporar mecanismos que detecten y corrijan el problema.

Protocolo MESI

  • Las operaciones de memoria y las transacciones en el bus son atómicas.
  • La memoria debería actualizarse sólo cuando desaparecen las copias de un bloque en todas las cachés del sistema.
  • Sin embargo, el protocolo MESI provoca una actualización (BusWB) cuando algún procesador lee un bloque modificado por otro: Esta actualización es realmente innecesaria (sin embargo, hay que hacerlo, pues el estado S implica que la memoria está actualizada).

Invalidar

  • Una escritura provoca una situación de exclusividad en el bloque caché.
    • Otra escritura local no provoca tráfico en el bus.
    • Las escrituras se propagan cuando hay un fallo caché en el sistema.
    • La escritura se termina cuando se actualiza la caché local.

Actualizar

  • Una escritura actualiza las copias del mismo bloque en otras cachés.
    • No se producen fallos caché cuando se accede de nuevo a ese bloque.
    • Una sola transacción de bus propaga una escritura a varias cachés.
    • Múltiples escrituras provoca múltiples actualizaciones MOESI.

Protocolo MOESI

  • Eliminación de las actualizaciones de memoria innecesarias (MESI) Definiendo un nuevo estado, O (propietario).
  • Cinco estados para cada bloque de caché:
    • I: estado inválido
    • S: estado compartido (posiblemente, dos o más cachés tienen copia y la memoria puede ser coherente o no)
    • E: estado exclusivo no modificado (ninguna otra caché tiene copia y la memoria es coherente)
    • O: estado propietario (posiblemente, dos o más cachés tienen copia en estado S y la memoria es incoherente)
    • M: estado exclusivo modificado (ninguna otra caché tiene copia y la memoria es incoherente)

Caché No Bloqueante

  • Los fallos caché se resuelven sin bloquear la caché.
  • Pueden procesar múltiples aciertos y fallos concurrentemente.
  • La resolución de fallos se solapan con otros fallos y con computación.

Caché Uniprocesador

Caché Compartida

  • L1 es privada para minimizar la latencia de acceso.
  • L2 es compartida entre los núcleos.
    • No se duplican los datos compartidos en la L2.
    • El espacio L2 se asigna a los núcleos dinámicamente (según demanda).
    • Interferencia entre los datos accedidos por diferentes núcleos.
    • Cachés compartidas grandes tienen latencia alta.

Caché Privada

  • L1 y L2 son privadas.
    • No hay interferencia entre los datos accedidos por diferentes núcleos.
    • Las cachés L2 privadas tiene menos latencia.
    • Se duplican los datos compartidos en la L2.

Caché Compartida/Privada

Cuando el número de núcleos es amplio, una solución parcialmente compartida puede ser la mejor opción.

Caché Centralizada

  • Si la caché compartida es grande, se divide en bancos interconectados en red, pero ubicados de forma compacta en el chip.
  • El directorio para localizar los datos puede estar centralizado o distribuido en controladores asociados a cada banco.
  • La caché compartida constituye una estructura centralizada en el chip:
    • Se simplifica el movimiento de datos entre bancos.
    • Se simplifica la conexión de la caché compartida con el controlador de memoria.

Caché Distribuida

  • Los bancos de la caché compartida se distribuyen físicamente en el chip.
  • Cada banco se ubica próximo físicamente a un núcleo.
  • El conjunto núcleo – caché L1 – banco caché L2 se denomina tile (segmento).
  • Facilita el diseño escalable (replicación de segmentos) y la verificación.
  • Sin embargo, la latencia de acceso a los datos compartidos es mayor.
  • Tiene un mejor comportamiento térmico y escalabilidad que la solución centralizada.

Caché Uniforme y No Uniforme

Programación de MMD (Memoria Distribuida)

  • Descomposición en tareas + Distribución de datos.
    • Estática: Programador
  • Comunicaciones.
    • librerías de paso de mensajes
    • Ej. MPI (Message Passing Interface)
    • Planificación de tareas
    • Programador + SO
    • Estática (sobrecarga excesiva en la dinámica)
    • Objetivos:
      • Mínima comunicación
      • Máxima concurrencia

Tipos de MMD

  • MPP (Massively Parallel Processor)
    • máquinas con cientos o miles de procesadores
  • COW (Cluster of Workstations)
    • cada nodo es una estación de trabajo o PC
  • Constellation (Cluster of SMPs)
    • Cada nodo es un multiprocesador simétrico.
  • Cluster: conjunto de computadores construidos mediante el uso de hardware común y que se comportan como si fuesen una única computadora.
    • De alto rendimiento HPC
    • De balanceo de carga LBC
    • De alta disponibilidad

Coherencia Escalable

Problemas con la Coherencia Escalable

  • En general, la coherencia es más compleja de hacer cumplir en un sistema escalable
    • Las transacciones de red no son visibles globalmente (propagación de escrituras).
    • No hay un árbitro de red global que permita serializar las escrituras.

Solución Básica Basada en Directorios

  • Las transacciones de red no son visibles globalmente y no existe un bus común a todos los nodos, por lo que debemos introducir un nuevo recurso hardware que nos dé información global sobre las copias caché de los bloques de memoria: Directorio.
  • Funcionalidad de un directorio
    • Cada bloque de memoria tiene asociado una entrada en el directorio, que guarda Información sobre el estado y ubicación de las las copias caché de cada bloque de memoria.
    • Las operaciones de lectura y escritura modifican la información de estado mediante transacciones de red.
  • Ejemplo de operación
    • Cuando se produce un fallo caché, el nodo peticionario envía una transacción de red al módulo de memoria correspondiente.
    • Antes de acceder a la memoria, se busca en el directorio información sobre el bloque caché fallado.
    • Esta información se utiliza para enviar nuevas transacciones de red a los nodos oportunos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.