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
Respuesta
yo no soy un experto en esto, pero me encontré con este documento, tal vez sea útil http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2009.04.05a.pdf
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.
- 1. Invalidación de caché en Ehcache
- 2. Determine si la ubicación de la memoria está en la memoria caché de la CPU
- 3. Rendimiento al generar falta de memoria caché de la CPU
- 4. Invalidación de caché: ¿hay una solución general?
- 5. Asigne memoria estática en la memoria caché de la CPU en c/C++: ¿es posible?
- 6. Doctrina 2 resultado de invalidación de caché
- 7. Estrategias de invalidación de caché de proxy inverso de Nginx
- 8. ¿Código de diseño para caber en la memoria caché de la CPU?
- 9. ¿Cuántos bytes el controlador de caché toma de la memoria principal a la caché L2?
- 10. Borrar la memoria caché de Sitecore para un elemento de la memoria caché mediante programación
- 11. ¿Es posible leer la tasa de aciertos/caídas de la memoria caché de la CPU en Android?
- 12. ¿Qué causa un error de caché L3 en la CPU?
- 13. ¿Cómo funciona la memoria caché?
- 14. pesada mysql uso de la CPU o la memoria
- 15. Invalidación de la sesión de JPA EntityManager
- 16. Forzar actualización de la memoria caché después de la implementación
- 17. ¿Cómo puedo hacer un vaciado de la caché de la CPU en Windows x86?
- 18. Limitar la memoria de proceso/uso de CPU en Linux
- 19. Android - uso de memoria/CPU
- 20. Afinidad de la CPU en entornos virtualizados
- 21. ¿Usa la memoria caché del sistema de UIImage objetos con imágenes cargadas de la memoria caché de disco (NSCachesDirectory)?
- 22. Forma multiplataforma para obtener la utilización de CPU/memoria
- 23. cómo borrar L1 CPU y caché L2
- 24. Deshabilitar la memoria caché en Apache Felix
- 25. ¿Cómo uso la memoria caché en CakePHP?
- 26. web.config o app.config en la memoria caché
- 27. Invalidación de sesión aleatoria
- 28. ¿Cómo comprobar si la aplicación está unida a la CPU o ligada a la memoria?
- 29. Configuración de la memoria caché de segundo nivel de hibernación
- 30. Asp.Net Cache, modifique un objeto de la memoria caché y cambie el valor almacenado en la memoria caché
¿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? –
@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.) –