La consistencia del procesador es uno de los modelos de consistencia utilizados en el dominio de la computación concurrente (por ejemplo, en memoria compartida distribuida , transacciones distribuidas , etc.).
Un sistema exhibe consistencia de procesador si el orden en el que otros procesadores ven las escrituras de cualquier procesador individual es el mismo que el orden en que fueron emitidas. Debido a esto, la consistencia de procesador solo es aplicable a sistemas con múltiples procesadores. Es más débil que el modelo de consistencia causal porque no requiere que las escrituras de todos los procesadores se vean en el mismo orden, pero más fuerte que el modelo de consistencia PRAM porque requiere coherencia de caché . [1] Otra diferencia entre la consistencia causal y la consistencia de procesador es que la consistencia de procesador elimina los requisitos de que las cargas esperen a que se completen los almacenamientos y de atomicidad de escritura . [1] La consistencia de procesador también es más fuerte que la consistencia de caché porque la consistencia de procesador requiere que todas las escrituras de un procesador se vean en orden, no solo las escrituras en la misma ubicación de memoria. [1]
En el Ejemplo 1 a la derecha, el sistema simple sigue la consistencia del procesador, ya que todas las escrituras de cada procesador se ven en el orden en que ocurrieron en los otros procesadores y las transacciones son coherentes.
El ejemplo 2 no es consistente con el procesador, ya que las escrituras de P1 y P3 son vistas fuera de orden por P2 y P4 respectivamente.
El ejemplo 3 es consistente con el procesador y no causalmente consistente porque en P3: para la consistencia causal debería serlo ya que W(x)2 en P1 precede causalmente a W(y)3 en P2. R(y)3,R(x)1
R(y)3,R(x)2
El ejemplo 4 no es coherente con el procesador porque en P2: para la coherencia con el procesador debería serlo porque W(x)2 es la última escritura en x que precede a W(y)3 en P1.
Este ejemplo es coherente con la caché porque P2 ve las escrituras en las ubicaciones de memoria individuales en el orden en que se emitieron en P1. R(y)3,R(x)1
R(y)3,R(x)2
La consistencia del procesador (PC) relaja el orden entre los almacenamientos más antiguos y las cargas más recientes que se aplica en la consistencia secuencial (SC). [2] Esto permite que las cargas se envíen a la memoria caché y se completen potencialmente antes que los almacenamientos más antiguos, lo que significa que los almacenamientos se pueden poner en cola en un búfer de escritura sin la necesidad de implementar especulaciones de carga (las cargas pueden continuar libremente). [3] En este sentido, la PC funciona mejor que la SC porque no son necesarias las técnicas de recuperación para las especulaciones fallidas, lo que significa menos vaciados de la tubería. [3] La optimización de precarga que emplean los sistemas SC también es aplicable a los sistemas PC. [3] La precarga es el acto de obtener datos por adelantado para las próximas cargas y almacenamientos antes de que realmente se necesiten, para reducir la latencia de carga/almacenamiento. Dado que la PC reduce la latencia de carga al permitir que las cargas se reordenen antes de los almacenamientos correspondientes, la necesidad de precarga se reduce un poco, ya que los datos precargados se utilizarán más para los almacenamientos que para las cargas. [3]
En términos de qué tan bien un sistema de PC sigue la intuición de un programador, resulta que en sistemas correctamente sincronizados, los resultados de PC y SC son los mismos. [3] La intuición del programador es esencialmente cómo el programador espera que se ejecuten las instrucciones, generalmente en lo que se conoce como "orden de programa". El orden de programa en un sistema multiprocesador es la ejecución de instrucciones que resultan en el mismo resultado que una ejecución secuencial. El hecho de que PC y SC sigan esta expectativa es una consecuencia directa del hecho de que las cargas y los almacenamientos correspondientes en los sistemas de PC todavía están ordenados con respecto a los demás. [3] Por ejemplo, en la sincronización de bloqueo, la única operación cuyo comportamiento no está completamente definido por PC es el almacenamiento de adquisición de bloqueo, donde las cargas posteriores están en la sección crítica y su orden afecta el resultado. [3] Esta operación, sin embargo, generalmente se implementa con una instrucción condicional de almacenamiento o atómica, de modo que si la operación falla se repetirá más tarde y también se repetirán todas las cargas más recientes. [3] Todas las cargas que ocurren antes de este almacenamiento aún están ordenadas con respecto a las cargas que ocurren en la sección crítica y, como tal, todas las cargas más antiguas deben completarse antes de que las cargas en la sección crítica puedan ejecutarse.
La consistencia del procesador, aunque más débil que la consistencia secuencial, sigue siendo en la mayoría de los casos un modelo de consistencia más fuerte de lo que se necesita. Esto se debe a la cantidad de puntos de sincronización inherentes a los programas que se ejecutan en sistemas multiprocesador. [4] Esto significa que no pueden ocurrir carreras de datos (una carrera de datos es múltiples accesos simultáneos a la ubicación de la memoria donde al menos un acceso es una escritura). [3] Con esto en mente, es claro ver que un modelo podría permitir la reorganización de todas las operaciones de memoria, siempre que ninguna operación cruce un punto de sincronización [3] y una lo haga, llamado Ordenamiento débil. Sin embargo, el ordenamiento débil impone algunas de las mismas restricciones que la consistencia del procesador, a saber, que el sistema debe permanecer coherente y, por lo tanto, todas las escrituras en la misma ubicación de memoria deben ser vistas por todos los procesadores en el mismo orden. [4] Similar al ordenamiento débil, el modelo de consistencia de liberación permite la reordenación de todas las operaciones de memoria, pero se vuelve aún más específico y descompone las operaciones de sincronización para permitir una mayor relajación de los reordenamientos. [3] Ambos modelos suponen una sincronización adecuada del código y, en algunos casos, soporte de sincronización de hardware, por lo que la consistencia del procesador es un modelo más seguro al que adherirse si uno no está seguro acerca de la confiabilidad de los programas que se ejecutarán utilizando el modelo.
Uno de los principales componentes de la consistencia del procesador es que si se permite que una escritura seguida de una lectura se ejecute fuera del orden del programa, esto esencialmente da como resultado la ocultación de la latencia de escritura cuando se permite que las cargas avancen antes que los almacenamientos. Dado que muchas aplicaciones funcionan correctamente con esta estructura, los sistemas que implementan este tipo de orden relajado suelen parecer secuencialmente consistentes. Otros dos modelos que cumplen con esta especificación son SPARC V8 TSO (Total Store Ordering) y IBM-370. [4]
El modelo IBM-370 sigue la especificación de permitir que una escritura seguida de una lectura se ejecuten fuera del orden del programa, con algunas excepciones. La primera es que si las operaciones se realizan en la misma ubicación, deben estar en el orden del programa. La segunda es que si alguna de las operaciones es parte de una instrucción de serialización o hay una instrucción de serialización entre las dos operaciones, entonces las operaciones deben ejecutarse en el orden del programa. [4] Este modelo es quizás el más estricto de los tres modelos que se están considerando, ya que el modelo TSO elimina una de las excepciones mencionadas.
El modelo SPARC V8 TSO es muy similar al modelo IBM-370 con la diferencia clave de que permite que las operaciones en la misma ubicación se completen fuera del orden del programa. Con esto, es posible que una carga devuelva un almacenamiento que se produjo que está "desactualizado" en términos del orden del programa. [4] Estos modelos son similares a la consistencia del procesador, pero mientras que estos modelos solo tienen una copia de memoria, la consistencia del procesador no tiene tal restricción. Esto sugiere un sistema en el que cada procesador tiene su propia memoria, lo que enfatiza en la consistencia del procesador el "requisito de coherencia " . [4]
El modelo x86-TSO tiene varias definiciones diferentes. El modelo de almacenamiento total, como sugiere el nombre, es muy similar al SPARC V8. La otra definición se basa en búferes de escritura locales. Las diferencias entre los modelos x86 y SPARC TSO radican en la omisión de algunas instrucciones y la inclusión de otras, pero los modelos en sí son muy similares. [5] La definición del búfer de escritura utiliza varios estados y bloqueos para determinar si se puede leer o escribir en un valor en particular. Además, este modelo en particular para la arquitectura x86 no está plagado de los problemas de los modelos anteriores (menor consistencia) y proporciona una base más intuitiva sobre la que los programadores pueden construir. [5]
{{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda )