Memorias Cache
Etimología
La palabra
procede de la voz inglesa cache
(/kæʃ/;
«escondite secreto para guardar mercancías, habitualmente de
contrabando») y esta a su vez de la francesa
cache,
(/kaʃ/;
«escondrijo o escondite»). A menudo, en español se escribe con
tilde sobre la «e» del mismo modo como el que se venía escribiendo
con anterioridad al neologismo la palabra «caché» («distinción o
elegancia» o «cotización de un artista»), proveniente de un étimo
también francés, pero totalmente distinto: cachet,
(/ka'ʃɛ/;
«sello» o «salario»).
La
Real
Academia Española, en el Diccionario
de la lengua española sólo reconoce la palabra con tilde,aunque en la literatura especializada en Arquitectura
de computadoras (por ejemplo, las traducciones de libros de los
autores Andrew
S. Tanenbaum, John
L. Hennessy y David
A. Patterson) se emplea siempre la palabra sin tilde por ser
anglosajona y debería escribirse en cursiva (cache).
Introduccion
Cuando
en informática se habla de memoria caché o cache se está hablando
de aquella cantidad de información que permanece de manera temporal
en la computadora y que ayuda a la adquisición de velocidad y
eficiencia cuando es necesario recurrir a determinado tipo de datos.
El nombre de memoria cache proviene del francés, que significa
“escondido” u “oculto”.
Concepto
Una memoria
caché es una memoria en la que se almacenas una serie de datos
para su rápido acceso. Existen muchas memorias
caché (de disco, de sistema,
incluso de datos, como es el caso de la caché de Google),
pero en este tutorial nos vamos a centrar en la caché de los
procesadores.
Básicamente, la
memoria caché de un procesador
es un tipo de memoria volátil (del tipo RAM),
pero de una gran velocidad.
En la actualidad esta memoria está integrada en el procesador, y su
cometido es almacenar una serie de instrucciones y datos a los que el
procesador accede continuamente, con la finalidad de que estos
accesos sean instantáneos. Estas instrucciones y datos son aquellas
a las que el procesador necesita estar accediendo de forma continua,
por lo que para el rendimiento del procesador es imprescindible que
este acceso sea lo más rápido y fluido posible.
Historia
Desde la aparición en el mercado
de procesadores
con frecuencia de reloj de 25 o incluso 33 MHz o mas, una memoria
de trabajo
constituida por RAM
dinámica
ya no esta preparada para satisfacer las exigencias de la CPU
en términos de tiempo
de acceso. Con esas frecuencias, el procesador
se ve forzado a aguardar continuamente hasta que la
memoria de trabajo reaccione, lo cual conlleva que su capacidad
operativa no sea aprovechada al máximo. En principio, la memoria de
trabajo debería poder
ser sustituida completamente por componentes estáticos de RAM que
permitiesen intervalos de acceso bastante más breves. Pero esto
seria demasiado caro. Por eso, en los casos en relación a equipos
386 y 486 de altas frecuencias, se ha recurrido a un método
que ya se utilizaba en las gigantescas computadoras
de los años setenta: la instalación de una RAM cache externa.
"Externa" quiere decir, en este contexto, que se sitúa
fuera de la CPU, en su entorno y unida a ella por el sistema
bus.
En los 486, la memoria caché, que estamos describiendo recibe
también el nombre de "caché, de segundo nivel", se ubica
físicamente sobre la placa madre y consta de una serie de
componentes est ticos de RAM con una capacidad de 64 o 256 kilobits.
Así pues, con este procedimiento
pueden obtenerse cachés de 64 o 256 kilobytes, tamaño bastante
inferior al de la memoria de trabajo. La vigilancia de la memoria
caché corre a cargo del controlador caché 82385 de Intel.
Tipos
Hay tres tipos diferentes de memoria caché para
procesadores:
- Caché de 1er nivel (L1): Esta caché está integrada en el núcleo del procesador, trabajando a la misma velocidad que este. La cantidad de memoria caché L1 varía de un procesador a otro, estando normalmente entra los 64KB y los 256KB. Esta memoria suele a su vez estar dividida en dos partes dedicadas, una para instrucciones y otra para datos.
- Caché de 2º nivel (L2): Integrada también en el procesador, aunque no directamente en el núcleo de este, tiene las mismas ventajas que la caché L1, aunque es algo más lenta que esta. La caché L2 suele ser mayor que la caché L1, pudiendo llegar a superar los 2MB. A diferencia de la caché L1, esta no está dividida, y su utilización está más encaminada a programas que al sistema.
- Caché de 3er nivel (L3): Es un tipo de memoria caché más lenta que la L2, muy poco utilizada en la actualidad. En un principio esta caché estaba incorporada a la placa base, no al procesador, y su velocidad de acceso era bastante más lenta que una caché de nivel 2 o 1, ya que si bien sigue siendo una memoria de una gran rapidez (muy superior a la RAM, y mucho más en la época en la que se utilizaba), depende de la comunicación entre el procesador y la placa base.
Para hacernos una idea más
precisa de esto, imaginemos en un extremo el procesador y en el otro
la memoria RAM. Pues bien, entre ambos se encuentra la memoria caché,
más rápida cuanto más cerca se encuentre del núcleo del
procesador (L1). Las memorias caché son extremadamente rápidas (su
velocidad es unas 5 veces superior a la de una RAM de las más
rápidas), con la ventaja añadida de no tener latencia, por lo que
su acceso no tiene ninguna demora... pero es un tipo de memoria muy
cara. Esto, unido a su integración
en el procesador (ya sea directamente en el núcleo o no) limita
bastante el tamaño, por un lado por lo que encarece al procesador y
por otro por el espacio disponible.
En cuanto a la utilización de
la caché L2 en procesadores multinucleares, existen dos tipos
diferentes de tecnologías a aplicar. Por un lado está la
habitualmente utilizada por Intel, que consiste en que el total de la
caché L2 está accesible para ambos núcleos y por otro está la
utilizada por AMD, en la que cada núcleo tiene su propia caché L2
dedicada solo para ese núcleo. La caché L2 apareció por primera
vez en los Intel Pentium
Pro, siendo incorporada a continuación por los Intel Pentium II,
aunque en ese caso no en el encapsulado del procesador, sino
externamente (aunque dentro del procesador).
De: http://www.monografias.com/trabajos82/que-es-memoria-cache-procesador/que-es-memoria-cache-procesador2.shtml
Diseño
El sistema de memoria cache está diseñado especialmente para servir al apropiado y organizado almacenamiento de información en una computadora. Su función es básicamente mantener de manera temporal y accesible aquellos datos que son requeridos para realizar determinadas funciones o tareas. Esta disponibilidad permite que cada programa o archivo tenga inmediato acceso a la información necesaria y pueda así dedicarse a subir el nivel de eficiencia de las funciones normales. De tal modo, la memoria principal cuenta con una gran ayuda que le permite adquirir mayor velocidad de desempeño y mejores resultados por fuera de sus limitadas capacidades.
El sistema de memoria cache está diseñado especialmente para servir al apropiado y organizado almacenamiento de información en una computadora. Su función es básicamente mantener de manera temporal y accesible aquellos datos que son requeridos para realizar determinadas funciones o tareas. Esta disponibilidad permite que cada programa o archivo tenga inmediato acceso a la información necesaria y pueda así dedicarse a subir el nivel de eficiencia de las funciones normales. De tal modo, la memoria principal cuenta con una gran ayuda que le permite adquirir mayor velocidad de desempeño y mejores resultados por fuera de sus limitadas capacidades.
En el diseño de la memoria caché se deben considerar varios
factores que influyen directamente en el rendimiento de la memoria y
por lo tanto en su objetivo de aumentar la velocidad de respuesta de
la jerarquía de memoria. Estos factores son las políticas de
ubicación, extracción, reemplazo y escritura.
Política de ubicación
Decide dónde debe colocarse un bloque de memoria principal que
entra en la memoria caché. Las más utilizadas son:
- Directa: al bloque i-ésimo de memoria principal le corresponde la posición i módulo n, donde n es el número de bloques de la memoria caché. Cada bloque de la memoria principal tiene su posición en la caché y siempre en el mismo sitio. Su inconveniente es que cada bloque tiene asignada una posición fija en la memoria caché y ante continuas referencias a palabras de dos bloques con la misma localización en caché, hay continuos fallos habiendo sitio libre en la caché.
- Asociativa: Los bloques de la memoria principal se alojan en cualquier bloque de la memoria caché, comprobando solamente la etiqueta de todos y cada uno de los bloques para verificar acierto. Su principal inconveniente es la cantidad de comparaciones que realiza.
- Asociativa por conjuntos: Cada bloque de la memoria
principal tiene asignado un conjunto de la caché, pero se puede
ubicar en cualquiera de los bloques que pertenecen a dicho conjunto.
Ello permite mayor flexibilidad que la correspondencia directa y
menor cantidad de comparaciones que la totalmente asociativa.
Política de extracción
La política de extracción determina cuándo y qué bloque de
memoria principal hay que traer a memoria caché. Existen dos
políticas muy extendidas:
- Por demanda: un bloque sólo se trae a memoria caché cuando ha sido referenciado y no se encuentre en memoria caché.
- Con prebúsqueda: cuando se referencia el bloque
i-ésimo de memoria principal, se trae además el bloque
(i+1)-ésimo. Esta política se basa en la propiedad de localidad
espacial de los programas.
Política de reemplazo
Determina qué bloque de memoria caché debe abandonarla cuando no
existe espacio disponible para un bloque entrante. Básicamente hay
cuatro políticas:
- Aleatoria: el bloque es reemplazado de forma aleatoria.
- FIFO: se usa el algoritmo First In First Out (FIFO) (primero en entrar primero en salir) para determinar qué bloque debe abandonar la caché. Este algoritmo generalmente es poco eficiente.
- Menos recientemente usado (LRU): Sustituye el bloque que hace más tiempo que no se ha usado en la caché, traeremos a caché el bloque en cuestión y lo modificaremos ahí.
- Menos frecuencias usadas (LFU):
Sustituye el bloque que ha experimentado menos referencias.
Política de Actualización o Escritura
Determinan el instante en que se actualiza la información en
memoria principal cuando se hace una escritura en la memoria caché.
- Escritura Inmediata: Se escribe a la vez en Memoria caché y Memoria principal. Desventaja: genera cuello de botella.
- Escritura Aplazada: Actualiza únicamente la Memoria caché luego de la modificación de sus datos. Cuando el bus de sistema se encuentra libre, actualiza la memoria principal. Esto puede generar que los periféricos lean datos erróneos, pero es poco frecuente.
- Escritura Obligada: Actualiza únicamente la Memoria
caché luego de la modificación de sus datos. Cuando no hay otra
alternativa, actualiza la memoria principal. Esto puede producirse
por cualquiera de estas causas:
- Se accede a la posición de memoria principal modificada en la caché. Antes de permitir la lectura/escritura, debe actualizarse el dato en la memoria principal.
- Debe eliminarse una línea de la caché, entonces se
actualiza la memoria principal (en caso de ser necesario) antes de
proceder a la eliminación.
De: http://es.wikipedia.org/wiki/Cach%C3%A9_%28inform%C3%A1tica%29#Dise.C3.B1o
Estructura
La memoria cache se
estructura normalmente en pequeños campos donde se guardan los datos
necesarios (hasta un byte de espacio por cada campo o celda). Puede
tener lugar como parte integrante de la memoria principal como
también puede estar emplazada por fuera de ella y activarse de
manera autónoma. A través del método del hit rate o del promedio
de pedidos que recibe cada dato, se establece un orden de los
elementos más requeridos y que por tanto pasan a estar a mayor
disponibilidad, borrándose eventualmente aquellos que no vuelvan a
ser utilizados.
Cuando uno habla de la memoria cache de disco está haciendo referencia a un proceso similar al de la memoria cache RAM que se produce en la misma memoria principal. Este procedimiento es otro modo de implementar el sistema de memoria cache evitando usar la lenta memoria del disco duro pero manteniendo activo su interior y proveyéndole con datos de manera mucho más directa.
De: http://www.definicionabc.com/memoria-cache.php
Cuando uno habla de la memoria cache de disco está haciendo referencia a un proceso similar al de la memoria cache RAM que se produce en la misma memoria principal. Este procedimiento es otro modo de implementar el sistema de memoria cache evitando usar la lenta memoria del disco duro pero manteniendo activo su interior y proveyéndole con datos de manera mucho más directa.
De: http://www.definicionabc.com/memoria-cache.php
¿Por qué AMD ya no puede alcazar a intel?
de los procesadores como el rendimiento o el consumo gracias a sus athlon de arquitectura k7 y k8. Esto se debía a dos razones. Una por parte de intel y la otra por la coyuntura de la época en procesos de fabricación.
Con los pentium 4 intel tenía como meta alcanzar enormes
velocidades de reloj con sus procesadores. En aquella época en intel
se
hablaba de 10ghz. Para llegar a esa cifra hay que escoger ciertas
decisiones de diseño en el procesador que faciliten la subida en la
velocidad de reloj. Las más típicas son el aumentar la latencia de
las memorias caché o aumentar las etapas del pipeline del procesador
para que la ejecución de cada etapa dure lo menos posible y así
poder subir más la frecuencia. Estas decisiones de diseño tienen
desventajas.
El aumentar la latencia de la memoria caché hace que los accesos
a esta sean como es lógico más lentos y se pierdan ciclos de reloj
esperando una respuesta de la caché. El aumentar las etapas del
procesador no tendría desventajas si hablásemos de unas condiciones
ideales en las que el 100% de las instrucciones se ejecutan
correctamente. Para ahorrar accesos a la caché e indirectamente a la
memoria RAM, la unidad de control de los procesadores muchas veces
manda a ejecución en un procesador cosas que cree que debería estar
ejecutando. Mediante estudios estadísticos que la unidad de control
va haciendo durante la ejecución de los programas, la unidad de
control puede adivinar con gran precisión muchos aspectos que
definen el cómo se va a procesar algo en el propio procesador. Como
esto igual es un poco abstracto, voy a poner un ejemplo:
- Estamos en un programa que en un momento dado entra en un bucle. Si el procesador tuviese que mirar en cada vuelta del bucle las vueltas que faltan para que este acabe, se perdería tiempo por el camino. La unidad de control por lo tanto, intenta predecir las vueltas que dará ese bucle.
- En una parte de un programa se da una condición (la del bucle mismamente que hace que se continúe dando vueltas dentro del bucle o se salga de él) que según su resultado hace que la ejecución de ese programa salte a un lado o a otro. La unidad de control intentará predecir ese salto.
- Si el predictor de saltos ha funcionado bien, se continúa
con normalidad pero, ¿qué pasa si falla?
El el caso de fallo habría que echar atrás todo el pipeline ya
que habría que volver a ejecutar ese bucle para que saque el
resultado correcto de su ejecución. Se vaciaría todo el pipeline
porque no se podría asegurar que alguna de las instrucciones que
venía por detrás no utilizase ese resultado para alguno de sus
operandos. Es cierto que existen técnicas para reducir esta
penalización como la ejecución de instrucciones fuera de orden o en
menor medida la tecnología propietaria de intel que llama
HyperThreading, pero en aquella época esto no estaba tan
desarrollado y esta penalización se juntaba con la latencia de la
caché y un acceso a memoria lento, de unos
230 ciclos de reloj.
De: http://www.xataka.com/respuestas/el-eterno-dilema-procesador-amd-o-intel
De: http://www.xataka.com/respuestas/el-eterno-dilema-procesador-amd-o-intel
Ancajima Mendoza María Alejandra- Ingenieria de Sistemas