miércoles, 17 de junio de 2009

3.b ¿Cómo afectan las decisiones de organización de la cache a su rendimiento?

Introducción

El funcionamiento de una caché sigue un principio parecido al que formulamos para la memoria principal. En aquel caso, las instrucciones y datos se cargaban en la RAM (desde dispositivos lentos), donde la CPU podría acceder a mayor velocidad. Una caché de memoria se carga (desde la RAM) con los datos y/o instrucciones que ha buscado la CPU en las últimas operaciones.


La CPU buscará siempre primero la información en la caché, y la encontrará allí la mayoría de las veces, con lo que el acceso será muy rápido. Si desgraciadamente, no se encuentra la información en la caché, se perderá un tiempo extra en acudir a la RAM y copiar dicha información en la caché para que esté disponible. Como estos fallos ocurren con una frecuencia relativamente baja, el rendimiento mejora considerablemente, ya que la CPU accederá más veces a la caché que a la RAM.


Podemos definir por tanto dicho rendimiento como:


teniendo en cuenta que este valor para dicha memoria suele rondar entre un 85% y un 95%.



Jerarquía de niveles

Un PC incorpora varios tipos de caché. Pero, ¿de qué forma están organizados? Usualmente, los diferentes sistemas de caché se organizan por niveles, formando una jerarquía. En general se cumple que, a mayor cercanía a la CPU, se presenta mayor velocidad de acceso y menor capacidad de almacenamiento .


Para empezar, la caché de memoria se suele desglosar en dos niveles. En el nivel más cercano a la CPU se encuentra la caché L1 (level 1 o nivel 1). Ésta se halla integrada en el mismo chip que la CPU, con lo que el acceso se produce a la velocidad de trabajo del procesador (la máxima velocidad). Por supuesto, la caché L1 presenta un tamaño muy reducido (de 4 a 16 kB).

A continuación aparece la caché de nivel 2 o L2. Inicialmente, se instalaba en la placa base, en el exterior de la CPU. Los procesadores actuales la integran en el propio chip. Como era de esperar, tiene mayor capacidad que la caché L1 (de 128 a 512 kB) pero es una memoria más lenta.


El siguiente nivel lo constituye la memoria RAM, que suele hacer de caché para los dispositivos de almacenamiento y otros tipos de periféricos. El nivel más alto lo ocuparían las caché en disco duro, como son las utilizadas por los navegadores Web.


La búsqueda de información comienza por la caché L1, y se va subiendo nivel a nivel en caso de no encontrar lo que se busca en el nivel actual. Por supuesto, cuantas más capas haya que ascender, mayor retardo se pagará. Pero, a mayor cercanía a la CPU, la probabilidad de encontrar lo que se busca es mayor. Esta forma de trabajo resulta una excelente relación de compromiso entre diversos factores, y consigue mejorar el rendimiento del ordenador de forma notable.



Organización y funcionamiento interno

La entidad básica de almacenamiento de la caché la conforman las filas, a las que se llama también líneas de caché. Nunca se toma un byte de la RAM y se escribe en una celda de la caché. Por el contrario, en cada movimiento siempre se copia la información de la RAM suficiente para cubrir una línea de caché . En el caso de la escritura, el funcionamiento es totalmente análogo.


Toda caché incorpora, además, un espacio de almacenamiento llamado Tag RAM, que indica a qué porción de la RAM se halla asociada cada línea de caché. En otras palabras, la Tag RAM permite traducir una dirección de RAM en una línea de caché concreta. Ya que la RAM tiene mayor capacidad que la caché, ¿cómo se reparte la RAM entre las líneas de caché disponibles? Existen tres tipos de caché según la técnica empleada:


Caché de mapeo directo. Se divide la RAM en porciones de igual tamaño, tantas como líneas de caché existan. Cada línea de caché es un recurso a compartir por las direcciones de memoria de una porción diferente. Por ejemplo, si se dispone de una RAM de 64 MB y la caché de 512 kB presentada anteriormente, cada línea podrá almacenar 32 de las 4.096 direcciones que contiene la porción de RAM asociada (64 MB/ 16.384 líneas = 4.096 bytes / línea).


Esta técnica permite una búsqueda muy rápida, ya que cada posición de RAM sólo puede estar en una determinada línea. Sin embargo, la probabilidad de encontrar la información buscada es mínima. Imagine dos instrucciones A y B, que se corresponden con la misma línea de caché (esto es, pertenecen a una misma porción de RAM). Suponga que la CPU necesita ejecutar una secuencia alternada A, B, A, B, etc. En ese caso, se tendrá que acceder a la RAM para copiar A y luego para copiar B (y reemplazar a la instrucción A en la caché), y así hasta terminar la secuencia. Sin duda, el porcentaje de acierto es nulo en dicha situación. En la siguiente figura podemos ver un ejemplo de este tipo de mapeo.



Caché completamente asociativa. Cada línea de caché se puede llenar con cualquier grupo de posiciones de la memoria RAM. En este caso, el porcentaje de acierto es máximo, y el ejemplo anterior no produciría problemas. En cambio, el tiempo de acceso es muy elevado, puesto que una posición de RAM puede estar en cualquier línea de caché (esto es lento, incluso empleando algoritmos de búsqueda avanzados).


Caché asociativa por conjuntos de N líneas. La caché se divide en conjuntos de N líneas. A cada conjunto se le asocia un grupo de posiciones de RAM. Dentro del conjunto asignado, una posición de RAM puede ir a parar a cualquiera de las N líneas que lo forman. En otras palabras, dentro de cada conjunto la caché es totalmente asociativa.


Esta situación es la más equilibrada, puesto que se trata de un compromiso entre las técnicas anteriores. Si se hace N=1, se tiene una caché de mapeo directo. Si N es igual al número de líneas de la caché, se tiene una caché completamente asociativa. Si se escoge un valor de N apropiado, se alcanzará la solución óptima.En la siguiente figura podemos ver un mapeo asociativo de dos vías.



Normalmente, la caché L2 es de mapeo directo, mientras que la caché L1 es asociativa por conjuntos de N líneas.

No hay comentarios:

Publicar un comentario