? El uso de variables compartidas implica la utilización de copias de dichas variables en las caches de cada procesador.
? Esto plantea problemas nuevos en la gestión de la memoria. Por ejemplo, ¿cómo nos aseguramos de que todos los procesadores que comparten una variable “ven” en ella el valor “correcto” correspondiente a cada instante? ¿Cómo se mantiene la coherencia de los datos? (1) Coherencia de los datos
? Un sistema es coherente si los cambios que se producen en una copia de una variable van a aparecer en todas las demás “en algún momento” y en el mismo orden.
? Aunque manejando los mismos conceptos, las soluciones son diferentes en función del tipo de arquitectura: SMP ? snoopy DSM ? directorios Coherencia de los datos
? ¿Cómo controlar la escritura distribuida? (Gp:) A=2 (Gp:) A=2 (Gp:) A=2 (Gp:) mem. pral. (Gp:) cache (Gp:) A=2 (Gp:) A=3 ?
(Gp:) I (Gp:) I (Gp:) A=3 (Gp:) M
? invalidar las copias ? actualizar las copias + añadir estados al bloque de datos Coherencia: snoopy
? ¿Quién controla la cache? (Gp:) mem. pral. (Gp:) A=2 (Gp:) A=2 (Gp:) A=2 (Gp:) A=2 (Gp:) A=3 ?
(Gp:) INV
(Gp:) I (Gp:) I
? ¿Y la memoria principal? – según la política de escritura WT, WB – según el protocolo de coherencia hardware espía, snoopy Coherencia: snoopy
El sistema distribuido es esencialmente asíncrono. ¿Cómo controlar la atomicidad de las operaciones de coherencia?
atomicidad del bus + estados transitorios ? Atomicidad Coherencia: snoopy
? Cuando la red no es bus (DSM), el mecanismo de snoopy no sirve para mantener la coherencia de los datos, porque no existe un lugar común en el que aparezcan todos los accesos a memoria. ? Si se necesita mantener la coherencia de los datos por hardware, es necesario utilizar algún otro tipo de dispositivo: el directorio. Coherencia: directorios
? Dispositivo que contiene la información de coherencia referida a cada bloque de memoria: cuántas copias hay, dónde están, en qué estado se encuentran… ? Es un dispositivo distribuido, bien junto a los módulos de memoria principal asignados a cada procesador, bien en las caches. ? El protocolo es de invalidación. Se intercambian mensajes entre los procesos que tienen copia de la variable y el que tiene el trozo de directorio correspondien-te. El bloque de datos se mantiene en estado transitorio (busy) mientras dura la operación. Coherencia: directorios
Coherencia: ejemplo (Gp:) 1 bit proc. (Gp:) estado (Gp:) 0 … 1 … 0 M
(Gp:) L (Gp:) CC = controlador de comunic. D = directorio de coherencia L = local H = home R= remote (Gp:) H (Gp:) P (Gp:) C (Gp:) CC (Gp:) D (Gp:) MP (Gp:) R
(Gp:) 2
(Gp:) 3
(Gp:) 4 (Gp:) 5
(Gp:) 1
LD A (Gp:) 1 (Gp:) S
? Los directorios de coherencia permiten mantener la coherencia de datos en un sistema DSM.
? Pero hay que tener cuidado con: – el tamaño que ocupa el directorio. – el tiempo de respuesta de estas operaciones, que tienen que utilizar la red de comunicación del multiprocesador. – habrá latencias altas en ciertas operaciones ? multithreading, prefetch… Coherencia: resumen
? El proceso de coherencia se aplica a las variables compartidas cuando se modifican. Aunque sea costoso, sólo se aplica a un conjunto (muy) reducido de los accesos a memoria.
? Pero, ojo! la coherencia de datos se mantiene por bloques. Los procesadores pueden compartir un bloque de datos aunque no compartan ninguna variable de dicho bloque. ? la colocación en memoria y el reparto de datos y variables a los procesadores puede tener un efecto muy grande en el rendimiento del sistema. Coherencia: bloques
Página siguiente |