0% encontró este documento útil (0 votos)
37 vistas23 páginas

Módulo 3 - Lectura 3

El documento describe la memoria caché, incluyendo su organización en tres niveles (L1, L2, L3) dentro del procesador. La memoria caché tiene un tiempo de acceso más rápido que la memoria principal pero una capacidad más pequeña, y almacena datos y instrucciones que el procesador usará pronto para mejorar el rendimiento.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
37 vistas23 páginas

Módulo 3 - Lectura 3

El documento describe la memoria caché, incluyendo su organización en tres niveles (L1, L2, L3) dentro del procesador. La memoria caché tiene un tiempo de acceso más rápido que la memoria principal pero una capacidad más pequeña, y almacena datos y instrucciones que el procesador usará pronto para mejorar el rendimiento.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

La memoria caché

Introducción

La memoria caché

Referencias
LECCIÓN 1 de 3

Introducción

La evolución del caché Intel

«La microarquitectura Sunny Cove es la piedra angular sobre la


que descansa el futuro de la familia de procesadores Intel Core».
Esta contundente afirmación de Uri Frank, uno de los ingenieros
de Intel responsables del diseño de la nueva microarquitectura,
refleja con claridad lo importante que son los nuevos chips Intel

Core de 10.a generación para el futuro de la compañía de Santa


Clara.

Durante los últimos años, AMD ha conseguido colocar en el


mercado un porfolio de microprocesadores muy competitivo
tanto por su rendimiento global como por su precio. Intel
también ha contado con soluciones atractivas, aunque
habitualmente más por su productividad que por su precio, pero
se ha visto obligada a soportar el desgaste que han acarreado
las vulnerabilidades de seguridad que conocemos como Spectre
y Meltdown. En cualquier caso, es evidente que, de alguna
manera, con la familia de microprocesadores Ice Lake quiere
hacer «borrón y cuenta nueva».

La siguiente diapositiva describe con más precisión las mejoras


introducidas en el subsistema de memoria caché y el cauce de
ejecución… No obstante, es interesante que no pasemos por alto
las novedades que aparecen en la esquina inferior derecha de la
imagen porque describen otras mejoras que también pueden
tener un impacto importante en el rendimiento. Las más
relevantes son las introducidas en el algoritmo de predicción de
bifurcaciones; aquellas que persiguen reducir la latencia
derivada de las operaciones de carga de datos e instrucciones, y
también las que optimizan la carga anticipada de datos en la
caché con el propósito de contribuir al incremento del nivel de
paralelismo... (López, 3 de julio de 2019,
https://www.xataka.com/componentes/intel-core-10a-
generacion-a-fondo-asi-como-microarquitectura-sunny-cove-
quiere-ser-mayor-ordago-intel).

Figura 1: Mejoras introducidas en el subsistema de memoria caché


Fuente: [Imagen sin título sobre mejoras introducidas en el subsistema de memoria caché]. (s.
f.). Recuperada de https://www.xataka.com/componentes/intel-core-10a-generacion-a-fondo-
asi-como-microarquitectura-sunny-cove-quiere-ser-mayor-ordago-intel

C O NT I NU A R
LECCIÓN 2 de 3

La memoria caché

Como especialista en sistemas de información,


debes ser capaz de entender cómo se desarrollan en
bajo nivel (es decir, hardware) cada una de las
instrucciones que defines en los lenguajes de
programación, y entender el porqué de la necesidad
de los códigos tipo ensamblador que permiten la
traducción de lenguajes de programación a
operaciones matemáticas que un circuito puede
ejecutar.

Analizaremos, en esta lectura, la función de la memoria caché y sus distintas


implementaciones.

Si recuerdas las lecturas del módulo 1, habíamos visto que existe una
jerarquía de memorias y que esta responde, en esencia, a 3 factores:
el costo por GB de almacenamiento;

el tiempo de acceso;

la permanencia de los datos.

Piensa y repasa los conceptos de jerarquía de


memorias que hemos visto. ¿Tienes claras las
unidades de capacidad? ¿Por qué 1 GB no es lo
mismo que 1000 MB?

Desde este punto de vista, los “registros” de memoria del procesador son los
más rápidos que hay en la PC, pero son los más caros y con menos
capacidad de retención de la información. En el otro extremo se sitúan los
HDD, que son los más lentos, pero también los más baratos (por GB) y con
una altísima capacidad de permanencia de los datos.

En el punto medio, tendremos toda la variedad de memorias que hemos


analizado en módulos anteriores (y algo más que veremos luego), las cuales
son implementadas de distinta forma según las necesidades.
Figura 2: Jerarquía de memorias

Fuente: [Imagen sin título sobre jerarquía de memorias]. (s. f.). Recuperada de
https://instintobinario.com/el-memory-wall-y-la-jerarquia-de-memorias/

Según se desprende de lo que vimos en lecturas anteriores de este mismo


módulo y del artículo de Castillo (30 de junio de 2019), la organización interna
del microprocesador incluye, dentro de su arquitectura, el uso de las
memorias denominadas caché.

Como lo muestra la figura 3, es claro que no solo existen memorias caché


entre las diferentes partes del procesador, sino que también se han
desarrollado implementaciones de memorias caché dentro del propio
procesador, como una manera indirecta de incrementar la velocidad de
procesamiento, sin tocar la frecuencia de los ciclos de clock, o la ejecución de
las instrucciones.

Figura 3: Componentes del procesador

Fuente: [Imagen sin título sobre componentes del procesador]. (s. f.). Recuperada de
https://www.profesionalreview.com/2019/06/30/partes-de-un-procesador/
Comercialmente, la memoria caché es una memoria extremadamente
rápida, mucho más que la memoria RAM que se encarga de almacenar las
instrucciones que serán usadas por el procesador de forma inminente o
cercana, es decir, aquellas que “cree” que serán usadas, ya que, a veces, no
hay más remedio que pedirlas directamente desde la memoria RAM.

La memoria caché de los procesadores actuales está integrada a la pastilla


del procesador y se puede dividir en tres niveles, L1, L2 y L3:

Caché de nivel 1 (L1): es la más pequeña después de los


registros, y la más rápida de las tres. Cada núcleo de
procesamiento tiene su propia caché L1, que, a su vez, está
dividida en dos, la L1 Data, que se encarga de almacenar los
datos, y la L1 Instruction, que almacena las instrucciones a
llevar a cabo. Suele ser de 32 KB cada una de ellas.

Caché de nivel 2 (L2): esta memoria es más lenta que la L1,


aunque también más grande. Normalmente, cada núcleo
tiene su propia L2, que puede ser de unos 256 KB, pero, en
este caso, no está integrada directamente en el circuito del
núcleo.

Caché de nivel 3 (L3): es la más lenta de las tres, aunque


mucho más rápida que la memoria RAM. También está
situada fuera de los núcleos y está repartida entre varios
núcleos. Oscila entre los 8 MB y los 16 MB, aunque en CPU
muy potentes alcanza hasta 30 MB. (Castillo, 30 de junio de
2019,
https://www.profesionalreview.com/2019/06/30/partes-de-
un-procesador/).

Figura 4: Niveles de caché en un procesador

Fuente: [Imagen sin título sobre niveles de caché en un procesador]. (s. f.). Recuperada de
https://www.profesionalreview.com/2019/06/30/partes-de-un-procesador/

¿Un procesador con más niveles de caché será más rápido que uno
con menos niveles, pero con más capacidad por nivel?
Organización de la caché

Continuando con la visión de los autores Orenga y Manonellas (s. f.), y


referenciando a los factores de jerarquía de memorias ya vistos, diremos que

la memoria caché tiene un tiempo de acceso inferior al de la


memoria principal con el objetivo de reducir el tiempo de acceso
medio a los datos, pero también tiene un tamaño mucho más
reducido que la memoria principal. Si un dato está en la
memoria caché, es posible proporcionarlo al procesador sin
acceder a la memoria principal; si no, primero se lleva el dato de
la memoria principal a la memoria caché y después se
proporciona el dato al procesador.

Si, en la mayoría de los accesos a memoria, el dato está en la


memoria caché, el tiempo de acceso medio será próximo al
tiempo de acceso a la memoria caché. Eso es factible gracias a
la característica de proximidad referencial de los programas.
Para trabajar con memoria caché, la memoria principal se
organiza en bloques de palabras, de manera que cuando hay
que trasladar datos de la memoria principal a la memoria caché
se lleva un bloque entero de palabras de memoria, no se trabaja
con palabras individuales.

Cada vez que el procesador quiere acceder a una palabra de


memoria, primero se accede a la memoria caché; si la palabra
de memoria se encuentra almacenada en la memoria caché, se
proporciona al procesador y diremos que se ha producido un
acierto. En caso contrario, se lleva el bloque de datos de la
memoria principal que contiene la palabra de memoria hacia la
memoria caché y, cuando la palabra ya está en la memoria
caché, se proporciona al procesador; en este caso, diremos que
se ha producido un fallo.

Cuando hay un fallo, el hardware de la memoria caché debe


realizar la secuencia de tareas siguiente:

1. Solicitara la memoria principal el bloque donde está el dato


que ha producido el fallo.

2. Llevar el bloque de datos solicitado a la memoria caché. Las


operaciones realizadas en esta tarea dependerán de las
políticas de asignación y algoritmos de reemplazo que
veremos más adelante.

3. El procesador obtiene el dato de la caché como si se hubiera


producido un acierto.
Un acceso con fallo en la memoria caché puede ser bastante
más costoso en tiempo que un acceso con acierto, por lo que es
muy importante tener un número reducido de fallos. A partir del
concepto de acierto y fallo se definen los parámetros que
utilizaremos para evaluar el rendimiento de una memoria caché:
tasa de fallos y tiempo medio de acceso.

La tasa de fallos se define de la manera siguiente:

Tf = Número de fallos / Número de accesos a la memoria

Por otra parte, se define la tasa de aciertos así:

Te = Número de aciertos / Número de accesos a la memoria = 1

– Tf

Uno de los objetivos del diseño del sistema de memoria es


obtener una tasa de fallos tan baja como sea posible.
Generalmente, se espera que sea inferior al 10 %. Se puede
calcular también el tiempo medio de acceso tm a partir de la

tasa de fallos y de la tasa de aciertos, conociendo el tiempo de


acceso en caso de aciertos te y el tiempo de acceso en caso de

fallo tf, ya que el tiempo de fallo tiene en cuenta el tiempo

necesario para llevar todo un bloque de la memoria principal a la


memoria caché y el tiempo de acceso al dato.
tm = Tf × tf + Te × te = Tf × tf + (1 – Tf) × te = Tf × (tf – te) + te

Si la tasa de fallos es cero, el tiempo medio de acceso a


memoria es igual al tiempo de acceso a la memoria caché.
(Orenga y Manonellas, s. f.,
http://cv.uoc.edu/annotation/8255a8c320f60c2bfd6c9f2ce11b2
e7f/619469/PID_00218275/PID_00218275.html).

Líneas de caché

La memoria caché también se organiza en bloques que se


denominan líneas. Cada línea está formada por un conjunto de
palabras (el mismo número de palabras que tenga un bloque de
memoria principal), más una etiqueta compuesta por unos
cuantos bits. El contenido de la etiqueta permitirá saber qué
bloque de la memoria principal se encuentra en cada línea de la
memoria caché en un momento dado.

El tamaño de la línea es de unos cuantos bytes de información


(un tamaño habitual está entre los 32 bytes y 128 bytes).
Aumentar el tamaño de la línea permite aprovechar la localidad
espacial, pero hasta cierto punto. Cuando se produce un fallo, el
tiempo necesario para trasladar una línea más grande aumenta;
además, disminuye el número de líneas disponibles de la
memoria caché (el tamaño de la memoria caché es fijo) y
tendremos más competencia para conseguir un bloque, lo que
hará que se saquen de la caché líneas que todavía no se han
utilizado en su totalidad y se reducirá el efecto de la localidad
espacial, y todo ello puede representar un aumento en la tasa de
fallos. (Orenga y Manonellas, s. f.,
http://cv.uoc.edu/annotation/8255a8c320f60c2bfd6c9f2ce11b2
e7f/619469/PID_00218275/PID_00218275.html).

Políticas de correspondencia o asignación

El número de líneas disponibles en la memoria caché es siempre


mucho más pequeño que el número de bloques de memoria
principal. En consecuencia, la memoria caché, además de la
información almacenada, debe mantener alguna información
que relacione cada posición de la memoria caché con su
dirección en la memoria principal.

Para acceder a un dato se especifica la dirección en la memoria


principal; a partir de esta dirección hay que verificar si el dato
está en la memoria caché. Esta verificación la haremos a partir
del campo etiqueta de la línea de la memoria caché que indica
qué bloque de memoria principal se encuentra en cada una de
las líneas de la memoria caché. La política de asignación
determina dónde podemos colocar un bloque de la memoria
principal dentro de la memoria caché y condiciona cómo
encontrar un dato dentro de la memoria caché.

Se definen tres políticas de asignación diferentes para


almacenar datos dentro de una memoria caché:

1. Política de asignación directa: un bloque de la memoria


principal solo puede estar en una única línea de la memoria
caché. La memoria caché de asignación directa es la que
tiene la tasa de fallos más alta, pero se utiliza mucho porque
es la más barata y fácil de gestionar.

2. Política de asignación completamente asociativa: un bloque


de la memoria principal puede estar en cualquier línea de la
memoria caché. La memoria caché completamente
asociativa es la que tiene la tasa de fallos más baja. No
obstante, no se suele utilizar porque es la más cara y
compleja de gestionar.

3. Política de asignación asociativa por conjuntos: un bloque de


la memoria principal puede estar en un subconjunto de las
líneas de la memoria caché, pero dentro del subconjunto
puede encontrarse en cualquier posición.

La memoria caché asociativa por conjuntos es una combinación


de la memoria caché de asignación completamente asociativa y
la memoria caché de asignación directa. El número de
elementos de cada subconjunto no suele ser muy grande; un
número habitual de elementos es entre 4 y 64. Si el número de
elementos del subconjunto es n, la memoria caché se denomina
n-asociativa. (Orenga y Manonellas, s. f.,
http://cv.uoc.edu/annotation/8255a8c320f60c2bfd6c9f2ce11b2
e7f/619469/PID_00218275/PID_00218275.html).

Algoritmos de sustitución

Partiendo de lo expuesto por Stallings (2005) entendemos que, como la


memoria caché es un recurso escaso, deben utilizarse técnicas que permitan
borrar información actualmente almacenada para dar lugar a nuevos datos.

En caso de que se utilice una asignación directa, el proceso es simple, ya que,


cuando un nuevo dato desde un bloque de memoria debe ser copiado, el
anterior que ocupe la misma línea deberá ser eliminado previamente. En el
caso de correspondencias asociativas, este proceso no funciona y se deben
utilizar algoritmos.

A continuación, se describen de manera general los algoritmos


de reemplazo más comunes, pero se pueden encontrar otros
algoritmos o variantes de estos.
1. FIFO (first in first out). Para elegir la línea se utiliza una cola,
de manera que la línea que hace más tiempo que está
almacenada en la memoria caché será la reemplazada. Este
algoritmo puede reducir el rendimiento de la memoria caché
porque la línea que se encuentra almacenada en la memoria
caché desde hace más tiempo no tiene que ser
necesariamente la que se utilice menos. Se puede
implementar fácilmente utilizando técnicas de buffers
circulares (o round-robin): cada vez que se debe sustituir una
línea se utiliza la línea del buffer siguiente, y cuando se llega a
la última, se vuelve a empezar desde el principio.

2. LFU (least frequently used). En este algoritmo se elige la línea


que hemos utilizado menos veces. Se puede implementar
añadiendo un contador del número de accesos a cada línea
de la memoria caché.

3. LRU (least recently used). Este algoritmo elige la línea que


hace más tiempo que no se utiliza. Es el algoritmo más
eficiente, pero el más difícil de implementar, especialmente si
hay que elegir entre muchas líneas. Se utiliza habitualmente
en memorias caché asociativas por conjuntos, con conjuntos
pequeños de 2 o 4 líneas…

Aleatorio. Los algoritmos anteriores se basan en factores


relacionados con la utilización de las líneas de la caché; en
cambio, este algoritmo elige la línea que se debe reemplazar al
azar. Este algoritmo es muy simple y se ha demostrado que
tiene un rendimiento solo ligeramente inferior a los algoritmos
que tienen en cuenta factores de utilización de las líneas.
(Orenga y Manonellas, s. f.,
http://cv.uoc.edu/annotation/8255a8c320f60c2bfd6c9f2ce11b2
e7f/619469/PID_00218275/PID_00218275.html).

Políticas de escritura

Hasta el momento, hemos visto

la problemática de acceder a la memoria caché para leer un


dato. Cuando se debe realizar una operación de escritura,
aparecen nuevos problemas porque los datos que tenemos en
la memoria caché son una copia de los datos que tenemos en la
memoria principal y hay que garantizar la coherencia de los
datos.

A continuación, comentaremos diferentes políticas para


gestionar las escrituras y mantener la coherencia entre los datos
de la memoria caché y la memoria principal:

1. Escritura inmediata (write trough): cuando se escribe en la


memoria caché, también se escribe en la memoria principal,
transfiriendo todo el bloque que contiene el dato modificado;
de esta manera, en todo momento, la copia que tenemos en
la caché es idéntica a la que tenemos en la memoria principal.
La política de escritura inmediata es la más fácil de
implementar, pero su inconveniente es que produce un gran
flujo de información entre la memoria caché y la memoria
principal.

2. Escritura
aplazada (write back): las escrituras se efectúan
solo sobre la memoria caché. La memoria principal se
actualiza cuando se elimina una línea de la memoria caché
que ha sido modificada. Eso implica añadir algunos bits a
cada línea de la memoria caché para saber si la línea se ha
modificado o no.

Si hay que reemplazar una línea que ha sido modificada,


primero es necesario copiar la línea modificada a la memoria
principal y, a continuación, llevar el nuevo bloque, lo que
aumenta significativamente el tiempo para acceder al dato.
(Orenga y Manonellas, s. f.,
http://cv.uoc.edu/annotation/8255a8c320f60c2bfd6c9f2ce11
b2e7f/619469/PID_00218275/PID_00218275.html).

¿Se mencionó antes que existen aciertos y fallos en la lectura de


datos y en la escritura?

Cuando se quiere hacer una escritura de una dirección que no


está en la memoria caché, se producirá un fallo; este fallo se
puede tratar de diferentes maneras:

1. Escribirdirectamente en la memoria principal y no llevar el


dato a la memoria caché. Esta técnica se puede utilizar en la
escritura inmediata. Evitamos transferir el bloque a la caché,
pero no se tiene en cuenta la proximidad referencial, ya que
es muy probable que haya nuevos accesos al mismo bloque
de datos.

2. Llevar el bloque a la memoria caché y escribir


simultáneamente en la caché y en la memoria principal. Esta
técnica es la que se utiliza habitualmente en la escritura
inmediata.

3. Llevar el bloque a la memoria caché y escribir solo en la


caché. Esta técnica se utiliza habitualmente en escritura
aplazada. (Orenga y Manonellas, s. f.,
http://cv.uoc.edu/annotation/8255a8c320f60c2bfd6c9f2ce11
b2e7f/619469/PID_00218275/PID_00218275.html).

C O NT I NU A R
LECCIÓN 3 de 3

Referencias

Castillo, J. A. (30 de junio de 2019). Partes de un procesador fuera y dentro:


conceptos básicos. Profesional review. Recuperado de
https://www.profesionalreview.com/2019/06/30/partes-de-un-procesador/

[Imagen sin título sobre componentes del procesador]. (s. f.). Recuperada
de https://www.profesionalreview.com/2019/06/30/partes-de-un-
procesador/

[Imagen sin título sobre jerarquía de memorias]. (s. f.). Recuperada de


https://instintobinario.com/el-memory-wall-y-la-jerarquia-de-memorias/

[Imagen sin título sobre mejoras introducidas en el subsistema de memoria


caché]. (s. f.). Recuperada de https://www.xataka.com/componentes/intel-
core-10a-generacion-a-fondo-asi-como-microarquitectura-sunny-cove-quiere-
ser-mayor-ordago-intel

[Imagen sin título sobre niveles de caché en un procesador]. (s. f.).


Recuperada de https://www.profesionalreview.com/2019/06/30/partes-de-
un-procesador/
López, J. C. (3 de julio de 2019). Intel Core de 10.ª generación, a fondo: así es
como la microarquitectura Sunny Cove quiere ser el mayor órgano de Intel.
Xataka. Recuperado de https://www.xataka.com/componentes/intel-core-
10a-generacion-a-fondo-asi-como-microarquitectura-sunny-cove-quiere-ser-
mayor-ordago-intel

Orenga, M. A. y Manonellas, G. E. (s. f.). Sistema de memoria. Recuperado de


http://cv.uoc.edu/annotation/8255a8c320f60c2bfd6c9f2ce11b2e7f/619469/
PID_00218275/PID_00218275.html

Stallings, W. (2005). Organización y arquitectura de computadores. Madrid,


ES: Prentice Hall.

C O NT I NU A R

También podría gustarte