2011-01-04 7 views
5

He estado leyendo modelos de memoria recientemente y estaba algo confundido sobre cómo funcionaba esto.Comprensión de los modelos de memoria

Para citar http://cis.poly.edu/muller/CS623/weakmemory.htm

si el procesador escribe un nuevo X, entonces escribe un nuevo Y, todos los demás procesadores que posteriormente ejecutar una lectura Y a continuación, una lectura X, se acceda al nuevo Y y nuevo X , el antiguo Y y el nuevo X, o el antiguo X y el antiguo Y: pero ningún procesador accederá a la Y nueva y la X anterior. Esta asunción de de orden fuerte fue, en una vez, razonable. Los fabricantes actuales de computadoras , sin embargo, recomiendan que los programadores no confíen en el pedido de memoria . Esto se debe a que los sistemas de gestión de memoria más recientes intentan reordenar el acceso a memoria para fines de optimización . Los sistemas a los que se les permite solicitud de memoria de reordenamiento se llaman sistemas de memoria débilmente ordenados (modelos). Para examinar cómo un reordenamiento se puede usar para mejorar el rendimiento, considere el siguiente código de ensamblador [2].

Load reg1, A     // register1 = contents of memory A 
Load reg2, B     // register2 = contents of memory B 
ADD reg3, reg1, reg2  // register3 = register1 + register2 
Store reg3, C     // contents of memory C = contents of register3 

Si asumimos que la ubicación B es actualmente en la memoria caché y la ubicación A se no en caché, entonces la carga de una tomará más tiempo que B. En lugar de esperar a que A, la CPU puede busca B desde su caché, ocultando la latencia de B: así la CPU puede realizar la adición tan pronto como A esté disponible . Al relajar el modelo de memoria (secuencial) fuerte de la ejecución (es decir, A debe cargar primero, seguido de B), es posible un mayor rendimiento ---- pero el reordenamiento puede no ser transparente para el software. Considere el fragmento de código a continuación, es parte del código que se puede utilizar para implementar un semáforo spinlock [2].

Mi pregunta es, ¿cómo es posible que con un modelo de memoria más débil podría conducir al caso que un procesador podría acceder a la nueva Y y la antigua X. ¿No está escrito en la misma memoria (ram) o ¿Funciona de manera diferente? Supongo que si un proceso modifica una variable y otra lo lee después de eso, lee el último valor.

Otra cosa de la que no estoy seguro es qué componente permite reordenar el acceso a la memoria, mi suposición ahora es que un compilador puede reordenar las instrucciones. Pero, ¿podría una CPU también reordenarlos?

Gracias

Respuesta

4

Debe recordar que la memoria caché se encuentra entre la CPU y la memoria. Cuando el software escribe un valor, ciertamente aterriza en el caché, pero puede que nunca vuelva a la memoria principal si el valor se escribe nuevamente antes de que el caché lo copie en la RAM (variables de bucle de pensamiento y locals). Toda esta discusión gira en torno a los diferentes modelos para cuando los datos se colocan realmente en la memoria RAM o se leen desde la memoria RAM.Dentro de un núcleo, realmente no importa, ya que usarán ese clima escrito de último valor que proviene de la memoria caché o RAM.

Cuestiones relacionadas