2010-02-06 31 views
6

Cuando mi programa realiza una operación de carga con semántica de adquisición/operación de tienda con semántica de liberación o tal vez una valla completa, invalida la memoria caché de la CPU.
Mi pregunta es esta: ¿qué parte de la memoria caché está invalidada? ¿Solo la línea de caché que contiene la variable que he usado adquiere/libera? o tal vez todo el caché está invalidado? (L1 + L2 + L3 .. y así sucesivamente?). ¿Hay alguna diferencia en este tema cuando uso la semántica de adquisición/liberación, o cuando uso una valla completa?Invalidación de la memoria caché de la CPU

+0

¿Qué está utilizando para invalidar la memoria caché de la CPU (Assembler, llamada al sistema operativo?) Y también ¿a qué tipo de arquitectura/CPU se aplica? –

+0

@Johannes Rudolph, digamos que el código real está escrito en C# (volátiles, operaciones interbloqueadas, barras de memoria), pero finalmente se traduce al código de operación del ensamblador apropiado. En mi situación personal, estoy trabajando con una máquina SMP con chipset Intel (Xeon, particularmente). Pero me gustaría saber cómo ocurre este proceso de invalidación en un espectro más "general" (AMD/Intel, SMP/NUMA, etc.) –

Respuesta

2

Al realizar una carga sin vallas o exclusiones mutuas, entonces el valor cargado potencialmente podrían venir de cualquier parte, es decir, , cachés, registros (a modo de optimizaciones del compilador) o RAM ... pero a partir de su pregunta, usted ya sabía esto.

En la mayoría de las implementaciones mutex, cuando adquiere un mutex, siempre se aplica una valla, explícitamente (por ejemplo, mfence, barrera, etc.) o implícitamente (por ejemplo, prefijo de bloqueo para bloquear el bus en x86). Esto hace que las líneas de caché de todos los cachés en la ruta se invaliden.

Tenga en cuenta que no se invalida toda la memoria caché, solo las respectivas líneas de caché para la ubicación de la memoria. Esto también incluye las líneas para el mutex (que generalmente se implementa como un valor en la memoria).

Por supuesto, hay detalles específicos de la arquitectura, pero así es como funciona en general.

También tenga en cuenta que esta no es la única razón para invalidar los cachés, ya que puede haber operaciones en una CPU que necesiten memorias caché en otra que se invaliden. Hacer una búsqueda en Google de "protocolos de coherencia de caché" le proporcionará mucha información sobre este tema.

Cuestiones relacionadas