stringtranslate.com

Protocolo del dragón

El protocolo Dragon [1] es un protocolo de coherencia de caché basado en actualizaciones que se utiliza en sistemas multiprocesador . La propagación de escritura se realiza actualizando directamente todos los valores almacenados en caché en varios procesadores. Los protocolos basados ​​en actualizaciones, como el protocolo Dragon, funcionan de manera eficiente cuando una escritura en un bloque de caché es seguida por varias lecturas realizadas por otros procesadores, ya que el bloque de caché actualizado está disponible en todas las cachés asociadas con todos los procesadores.

Estados

Cada bloque de caché reside en uno de los cuatro estados: exclusivo-limpio, compartido-limpio, compartido-modificado y modificar.

Para cualquier par de cachés dado, los estados permitidos de un bloque de caché dado junto con los estados de los otros cachés son los siguientes (los estados abreviados en el orden anterior):

Actas

Hay 4 transacciones de procesador y 2 transacciones de bus.

Lectura de procesador (PrRd) : esto sucede cuando el procesador completa una lectura exitosa en un determinado bloque de caché ubicado en su caché.

Escritura del procesador (PrWr) : esto sucede cuando el procesador completa una escritura exitosa en un bloque de caché determinado ubicado en su caché. Esto hace que el procesador sea el último en actualizar el bloque de caché.

Error de lectura del procesador (PrRdMiss) : esto sucede cuando el procesador no puede leer un bloque de caché y necesita recuperar el bloque de la memoria o de otro caché.

Error de escritura del procesador (PrWrMiss) : esto sucede cuando el procesador no puede escribir en un bloque de caché desde su caché y necesita recuperar el bloque de la memoria u otra caché y luego escribir en él. Esto hace que el procesador sea el último en actualizar el bloque de caché.

Lectura de bus (BusRd) : esto sucede cuando un procesador solicita al bus que obtenga el último valor del bloque de caché, ya sea de la memoria principal o del caché de otro procesador.

Vaciado : esto sucede cuando un procesador coloca un bloque de caché completo en el bus. Esto es para reflejar los cambios realizados por el procesador en el bloque almacenado en caché en la memoria principal.

Actualización de bus (BusUpd) : esto sucede cuando un procesador modifica un bloque de caché y otros procesadores necesitan una actualización en sus respectivos bloques de caché. Esto es exclusivo de los protocolos de actualización de escritura únicamente. BusUpd tarda menos tiempo en comparación con la operación Flush, ya que las escrituras realizadas en cachés son más rápidas que en la memoria. Otro punto a tener en cuenta es que un caché no puede actualizar su copia local de un bloque de caché y luego solicitar al bus que envíe una actualización de bus. Si esto sucede, entonces podría ser posible que dos cachés actualicen independientemente su copia local y luego soliciten al bus. Entonces verían las dos escrituras simultáneamente, lo que no seguiría la consistencia secuencial .

También se requiere una línea compartida para indicar si un determinado bloque de caché está disponible en múltiples cachés. Esto es necesario porque una de las cachés podría expulsar el bloque sin necesidad de actualizar los otros bloques. La línea compartida ayuda a reducir las transacciones de memoria y bus en algunos casos en los que el bloque está disponible en una sola caché y, por lo tanto, no se requiere una actualización de bus. Una línea dedicada de este tipo para detectar el uso compartido se observa en protocolos de escritura y actualización, como el protocolo Firefly , y se implementa en función de estándares de bus como Futurebus (estándar IEEE P896.1). [2]

Transiciones

Protocolo Dragon: transacciones iniciadas por el procesador

Transiciones iniciadas por el procesador

Según el estado actual del bloque y la transacción iniciada por el procesador, el bloque de caché experimenta una de las siguientes transiciones de estado:

Protocolo Dragon: transacciones iniciadas por bus

Transiciones iniciadas por bus

Según el estado actual del bloque y la transacción iniciada por el bus, el bloque de caché experimenta una de las siguientes transiciones de estado:

Opciones de diseño de bajo nivel

Eliminación del estado compartido modificado

El procesador con el bloque de caché en estado Sm es responsable de actualizar la memoria principal cuando se reemplaza el bloque de caché. Pero si la memoria principal se actualiza cada vez que se produce una transacción de actualización de bus, no hay necesidad de estados Sm y Sc separados, y el protocolo puede permitirse un solo estado compartido. Sin embargo, esto provoca muchas más transacciones de memoria [3] que pueden ralentizar el sistema, especialmente cuando varios procesadores escriben en el mismo bloque de caché.

Difundiendo la sustitución del bloque Sc

El protocolo permite que los bloques de caché en el estado Sc se reemplacen de forma silenciosa sin ninguna actividad de bus. Si se realizó una transmisión para informar a otros cachés que se está reemplazando un bloque Sc, podrían probar la línea compartida y pasar al estado E si no hubiera otros participantes. La ventaja de tener un bloque en el estado E es que si el bloque se escribe más tarde, pasa al estado M y no hay necesidad de generar una transacción de actualización de bus. Por lo tanto, a costa de transmitir los reemplazos de los bloques Sc, podemos evitar las transacciones de actualización de bus. Y dado que la transmisión de reemplazos no es crítica en cuanto al tiempo, si no se requiere que un caché procese el reemplazo de inmediato, no hay inconvenientes. Por otro lado, si un caché no procesa una actualización de inmediato, puede provocar actualizaciones fuera de orden. En tales casos, un protocolo de actualización de tres estados, como el protocolo Firefly , puede tener ventajas de rendimiento.

Comparaciones

Protocolos invalidados por Dragon vs Write

Write Invalidate es otro conjunto de protocolos de coherencia de caché , donde una vez que se modifica un bloque de caché, los otros valores del mismo bloque en otros cachés no se actualizan, sino que se invalidan. [4] Los protocolos de invalidación de escritura son más eficientes en los casos en que hay muchas escrituras posteriores en el mismo bloque de caché, ya que la invalidación ocurre una vez y se evitan más transacciones de bus por parte de otros procesadores. Sin embargo, el protocolo de actualización de escritura es más eficiente en los casos en que una escritura en un bloque es seguida por múltiples lecturas en el mismo bloque. Dado que estamos actualizando los otros valores en caché una vez que lo escribimos, tienen acceso a los datos inmediatamente. En tal caso, el protocolo de invalidación de escritura es muy desventajoso porque cada vez que se modifica un bloque de caché en otro caché, el resto de los cachés necesitarán encontrar un error de coherencia e iniciar una transacción de bus para leer el nuevo valor. Por el contrario, el protocolo de actualización de escritura tiende, a veces, a mantener los valores del bloque actualizados durante más tiempo del necesario, lo que conducirá a un aumento de otros tipos de errores, es decir, errores de conflicto y de capacidad .

Protocolo Dragon vs Firefly

En el caso de Firefly , las transferencias de caché a caché de bloques modificados también se vuelven a escribir en la memoria principal al mismo tiempo. Pero como los accesos realizados a la memoria principal son órdenes de magnitud más lentos en comparación con los cachés, requiere una complejidad adicional de realizar una escritura diferida como una operación de bus separada. En cualquier caso, da como resultado un menor rendimiento. [5] Este problema se evita por completo en el caso del protocolo Dragon, ya que los bloques compartidos no se vuelven a escribir en la memoria en absoluto. Sin embargo, esto se produce a costa de un estado agregado (compartido modificado).

Referencias

  1. ^ Atkinson, Russell R.; McCreight, Edward M. (1 de enero de 1987). "El procesador dragón". Actas de la segunda conferencia internacional sobre soporte arquitectónico para lenguajes de programación y sistemas operativos . ASPLOS II. Los Alamitos, CA, EE. UU.: IEEE Computer Society Press. págs. 65–69. doi :10.1145/36206.36185. ISBN 978-0818608056.S2CID7019821  .​
  2. ^ Stenström, Per (1990-06-01). "Un estudio de los esquemas de coherencia de caché para multiprocesadores". Computer . 23 (6): 12–24. doi :10.1109/2.55497. ISSN  0018-9162.
  3. ^ Culler, David; Singh, Jaswinder Pal; Gupta, Anoop (1999). Arquitectura de computadoras paralelas, 1.ª edición | David Culler, Jaswinder Pal Singh, Anoop Gupta |. Gulf Professional. ISBN 9781558603431. Recuperado el 24 de octubre de 2016 . {{cite book}}: |website=ignorado ( ayuda )
  4. ^ Solihin, Yan (2015). Fundamentos de la arquitectura multinúcleo paralela . Chapman y Hall/CRC. págs. 205-206, 231-232. ISBN 9781482211184.
  5. ^ Archibald, James; Baer, ​​Jean-Loup (1986-09-01). "Protocolos de coherencia de caché: evaluación utilizando un modelo de simulación multiprocesador". ACM Trans. Comput. Syst . 4 (4): 273–298. doi : 10.1145/6513.6514 . ISSN  0734-2071. S2CID  713808.

Véase también