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