Cuando una palabra se carga desde la memoria, ¿se carga físicamente desde la RAM o el caché?

Depende de si la línea de caché (tamaño típico de 64 bytes) ya está en caché. Un escenario de caso típico cuando una CPU accede a una palabra podría ser el siguiente:

  • Compruebe si está almacenado en caché en el nivel 1 (caché L1)
  • Compruebe si está almacenado en caché en el nivel 2 (caché L2)
  • Compruebe si está almacenado en caché en el nivel 3 (caché L3)
  • Caché señorita! Acceda a la RAM directamente y cargue la palabra que está buscando.

Como nota al margen, la optimización de su programa para aprovechar sabiamente los cachés mejora enormemente su rendimiento (los programadores de Microsoft lo aprendieron de la manera difícil cuando tuvieron que optimizar su pila tcp / ip). Cache False Sharing es a menudo un gran obstáculo en los programas concurrentes también. Por eso, le recomiendo que eche un vistazo a los cachés de CPU y por qué le importa Scott Meyers (autor de Effective C ++), que le brinda una gran visión de los cachés de CPU y cómo funcionan.

Hay varios niveles de caché dentro del chip y la placa principal. La búsqueda descenderá en cascada por los distintos niveles hasta que llegue a la dirección que está buscando o, si no, saldrá a la RAM principal para obtenerla. Esto último puede tomar un tiempo considerable en computación, ya que un núcleo de hyperthreading detendrá ese proceso y continuará otro hasta que el resultado finalmente aparezca en el bus de direcciones. Puede llevar a cabo muchas instrucciones de otro proceso en el momento en que se resuelve el error de caché.

Depende de dónde estaban las palabras cuando se emitió la instrucción de carga: si la palabra estaba en la caché, se cargará en un registro de la caché (L1, L2, L3, etc.). Si la palabra estaba en la memoria, se cargará desde la memoria llenando cada nivel de caché en el camino y posiblemente expulsando otras líneas de caché.

Es posible que la palabra salga en el disco (en la memoria virtual), en cuyo caso la carga causará un error de página, trayendo la página a la RAM y luego llenando el caché como se indicó anteriormente.

Si está en el caché cuando sea necesario, vendrá de allí, de lo contrario, se cargará desde la RAM. Esto es transparente para el programador, excepto que tomará más tiempo si necesita provenir de la memoria principal.