Vous êtes sur la page 1sur 12

Adaptacin dinmica de memorias caches

S Roatta*, D. Rexachs**, E. Luque**.


(sroatta@eie.fceia.unr.edu.ar, d.rexachs@cc.uab.es, e.luque@cc.uab.es,) * Universidad Nacional de Rosario, Facultad de Ciencias Exactas, Ingeniera y Agrimensura, Escuela de Ingeniera Electrnica. Rosario, Argentina. ** Universidad Autnoma de Barcelona, Departamento de Informtica, Unidad De Arquitectura de Ordenadores y Sistemas Operativos. Bellaterra, Barcelona, Espaa.

Resumen
En las computadoras actuales, los parmetros que caracterizan la arquitectura de la cache se definen en la etapa de diseo del procesador y permanecen fijos durante toda la vida til del sistema. Sin embargo, el correcto funcionamiento de la cache y de toda la jerarqua de memoria depende en muchos casos del programa en ejecucin. Esto tiene una consecuencia no deseada: para determinados tipos de programas las prestaciones de la cache son inferiores a las esperadas. El objetivo de este trabajo es presentar modelos de cache con capacidad para adaptarse dinmicamente al comportamiento de la aplicacin en ejecucin. Se estudia experimentalmente la relacin entre los fallos, los parmetros de la cache y el tipo de aplicacin. Se analizan distintas alternativas de monitorizacin para conocer el comportamiento del programa que est siendo ejecutado. Finalmente, se presentan algunas ideas para la construccin de un controlador inteligente de cache.

Palabras clave
Memorias caches, jerarqua de memoria, adaptacin dinmica.

1 Introduccin.
La jerarqua de memoria es el cuello de botella de los sistemas de cmputo. Dos son las causas de tal afirmacin: por un lado las nuevas CPU salen al mercado con rendimientos cada vez mejores y estas mejoras avanzan en el tiempo con una rapidez mucho mayor que el progreso en la tecnologa de memorias; por otro lado el software necesita cada vez ms memoria y ms rpida. Una regla emprica comprobada en distintos experimentos [Handy, 98] [Hennesy, 94] [Smith, 82], es que un programa emplea el 80% de su tiempo en ejecutar el 20% de su cdigo. Como el coste de una memoria principal de alta velocidad es muy elevado, los sistemas incorporan una memoria de alta velocidad y de reducido tamao (memoria cache) en la que reside la fraccin de cdigo y datos que se utiliza en ese instante. Esto ltimo es posible gracias a que los programas tienden a reutilizar datos e instrucciones, caracterstica que conocida como principio de localidad. Una consecuencia de la localidad es que, basndose en el pasado reciente de un programa, se puede predecir con razonable precisin las instrucciones y datos que se utilizarn en un futuro cercano. Lamentablemente, en la mayora de las aplicaciones la localidad en los datos no es tan fuerte como en las instrucciones, por lo cual un objetivo del trabajo es justamente una solucin que mejore las prestaciones de la cache de datos, acercndolas a las que se tiene en la cache de instrucciones. Una hiptesis que se intentar demostrar a lo largo de todo este artculo es que los diferentes grados de localidad que exhiben diferentes programas, e incluso las variaciones que experimenta un nico programa en sus caractersticas de localidad a lo largo de su ejecucin, justifican un modelo de cache dinmico. El trabajo est organizado en tres partes: Primero, se presenta el estado del arte y se estudian las dependencias entre la tasa de fallos y distintas alternativas de sintonizacin de los parmetros de la cache. A continuacin, se muestra un estudio experimental que confirma la factibilidad de un modelo de cache dinmico. Finalmente, se propone una arquitectura dinmica de cache en donde
1

algunos parmetros se ajustan en funcin de los datos obtenidos en la monitorizacin en tiempo de ejecucin para adaptarse al comportamiento del programa

2 Los fallos en una memoria cache


Todo diseador de cache tiene como objetivo reducir la frecuencia de fallos de cache, as como tambin la penalizacin de cada uno. Las causas que pueden originar un fallo de cache permiten clasificarlos en cuatro grupos (figura 2.1): fallos forzosos, por capacidad, por conflicto y por coherencia [Handy, 98] [Hennesy, 94]. Los fallos forzosos, tambin llamados fallos de primera referencia, disminuyen con una adecuada poltica de prefetch. Los fallos por capacidad estn determinados por la relacin entre el tamao de la cache y el workload del programa. Es posible considerar dos tipos de fallos por conflicto, conocidos tambin como fallos por colisin: las autointerferencias y las inferencias cruzadas. Las autointerferencias son fallos sobre lneas que han sido previamente expulsadas por lneas pertenecientes a la misma estructura de datos. Las interferencias cruzadas se refieren a fallos sobre lneas que han sido expulsadas entre dos referencias consecutivas a ellas por lneas pertenecientes a otras estructuras de datos. Por otra parte, es posible que una lnea sea expulsada por una combinacin de lneas procedentes de la misma y de otra estructura de datos. Los fallos por conflicto, decrecen a medida que aumente el grado de asociatividad, y la bibliografa cita a la poltica LRU como la ms eficiente desde este punto de vista. Los fallos por coherencia se generan en sistemas multiprocesador cuando la modificacin del contenido de una cache invalida los datos homlogos residente en otra u otras caches. Este trabajo est orientado hacia sistemas monoprocesador por lo que no se considera este tipo de fallos.

2.1 Parmetros de una cache y su relacin con la tasa de fallos.


El funcionamiento de la cache es bastante simple. Cuando la CPU intenta leer una palabra de la memoria, se hace una comprobacin para determinar si la palabra est en la cache. Esta idea
parmetros que caracterizan una cache

fallos de cache

forzosos por capacidad por conflicto por coherencia

Fig 2.1 Tipos de fallos en una cache

tamao nmero de caches tamao de lnea poltica de correspondencia acceso virtual o fsico algoritmo de reemplazo algoritmo de fetch poltica de escritura

Fig 2.2 Parmetros de diseo de una cache

tan simple e intuitiva genera innumerables alternativas al momento de implementar un controlador de cache. Como se puede ver en la figura 2.2, podemos identificar ocho parmetros de diseo para diferenciar y clasificar las diferentes arquitecturas de cache. El tamao en Kbytes es, tal vez, el parmetro ms importante. El nmero de caches que
2

forman la cache est relacionado con la cantidad de niveles y la existencia de caches separadas para datos e instrucciones. El tamao de la lnea es la mnima cantidad de informacin a transferir desde la memoria principal. La poltica de correspondencia indica el sitio donde se colocan las lneas que se traen de la memoria principal. El acceso a la cache puede ser con direcciones virtuales o direcciones fsicas. El algoritmo de reemplazo determina como elegir entre las posibles candidatas, la lnea a reemplazar. El algoritmo de bsqueda gestiona cuando y como traer lneas de la memoria principal y comprende tanto la bsqueda ante un fallo (fetch on demand) como el intento de adelantarse a posibles peticiones (prebsqueda). Por ltimo, la poltica de escritura indica cuando se realizan las actualizaciones en la memoria principal. El estudio de la relacin entre los parmetros de la cache y determinados tipos de fallos es el primer paso para comprender con profundidad las limitaciones de las actuales arquitecturas y proponer mejoras. No es de inters para este trabajo describir exhaustivamente cada uno de los ocho parmetros mencionados, para ello es posible consultar la extensa bibliografa disponible [Smith, 82]; [Handy, 98]. Se propone (tabla 2.1) aumentar las prestaciones reduciendo los fallos por conflicto y forzosos mediante una ptima configuracin dinmica de parmetros. Para reducir los fallos forzosos se actuar sobre la poltica de prebsqueda, mientras que los fallos por conflicto se minimizarn con una gestin adecuada del tamao de lnea y las polticas de correspondencia y reemplazo.
Tipo de fallo: Es posible reducirlo dinmicamente? Parmetros a sintonizar:

forzoso por capacidad por conflicto por coherencia

S No S

Prebsqueda Ninguno Grado de asociatividad, poltica de reemplazo y tamao de lnea

Incumbe solamente a los multiprocesadores

Tabla 2.1 Tipos de fallos y sintonizacin dinmica

2.1.1 Grado de asociatividad y poltica de reemplazo


Como el nmero de bloques de la memoria principal es mayor que el nmero de lneas de la cache, es necesario un algoritmo que haga corresponder bloques de la memoria principal en lneas de la cache. Con relacin a esta caracterstica es posible clasificar a las memorias caches en tres grandes grupos: caches de correspondencia directa (donde cada bloque de memoria principal puede ser asignado a slo una lnea posible de cache), totalmente asociativas (donde cada bloque de memoria principal puede cargarse en cualquier lnea de la cache) y una solucin intermedia llamada asociativa por conjuntos. La correspondencia asociativa es la solucin ideal para eliminar los fallos por conflicto, pero ante una operacin de lectura es necesario efectuar primero una bsqueda en una memoria de acceso asociativo (tag cache) para determinar el sitio donde se encuentra el dato solicitado. Esto hace al sistema inaceptablemente lento. Por el contrario, en la correspondencia direct mapped se accede en paralelo a la data cache SRAM y a la tag cache SRAM, pues se conoce de antemano la nica posible ubicacin del dato. Es una variante ms rpida, pero con menor porcentaje de aciertos.
3

Cache:

Caractersticas generales

Opciones:

MULTIPLE ACCES CACHE AUGMENTED CACHE

direct mapped con ms de una funcin de mapping direct mapped de gran tamao + asociativa pequea Intenta predecir la lnea a utilizar dentro del conjunto

Existen tantas variantes como funciones de swaping entre las localizaciones primarias y secundarias. Victim cache Asist cache Non temporal buffer By pass buffer History table para guardar los tags de las lneas referenciadas ltimamente.

ASOCIATIVA POR CONJUNTOS CON PREDICCIN DE LNEA

Tabla 2.2 Gestin del grado de asociatividad y de la poltica de reemplazo en una cache de altas prestaciones

Con respecto a la poltica de correspondencia, se destacan actualmente dos lneas de investigacin en caches de altas prestaciones: por un lado memorias con arquitecturas direct mapped perfeccionadas para aumentar la tasa de aciertos (ej. augmented cache y multiple access cache); y por otro lado memorias de tipo asociativo con algn tipo de mejora que disminuya el tiempo de acceso (ej. asociativas por conjuntos con prediccin de lnea). La tabla 2.2 muestra las principales caractersticas y opciones de estas arquitecturas. La multiple-access cache [Peir, 99] es una memoria del tipo direct mapped que puede ser accedida ms de una vez (normalmente dos) con diferentes funciones de mapping. Si el dato se encuentra en la localizacin primaria se tiene un acceso muy rpido. Si se necesita acceder con la segunda funcin de mapping, se tiene una pequea penalizacin. Existen varias implementaciones de multiple-access caches con diferentes alternativas en la implementacin del swaping entre la localizacin primaria y secundaria. La opcin ms simple es, ante un fallo de cache, traer el dato a la localizacin primaria, desplazar la lnea de la localizacin primaria a la secundaria y desplazar la lnea de la localizacin secundaria a la memoria principal. Las caches asociativas por columnas implementan un bit para cada lnea que indica si ha sido accedida utilizando la funcin hash alternativa. Si ocurre un fallo primario y el bit est a uno, no es necesario buscar en la localizacin secundaria, y simplemente se reemplaza la lnea de la localizacin primaria. Este bit ayuda a identificar la secuencia correcta primaria/secundaria. La tercera opcin emplea una tabla para monitorizar las lneas que han sido utilizadas recientemente. Si ocurre un fallo de cache y la lnea a reemplazar ha sido usada recientemente, se mueve a un sitio alternativo seleccionado entre aquellas lneas que no se han utilizado recientemente. Las memorias caches asociativas por conjuntos de n vas pueden analizarse como n caches direct mapped en paralelo de tamao n veces menor. Una estrategia interesante es intentar predecir la lnea (dentro del conjunto considerado) donde se encuentra la palabra buscada. Una generalizacin de esta tcnica es utilizar una history table: una tabla capaz de guardar los tags de las lneas que han sido referenciadas recientemente. Las augmented caches [Jouppy, 98] tienen por objetivo sumar las ventajas de las direct mapped y las asociativas por conjuntos, evitando sus problemas. Las augmented caches son una opcin de inters en este trabajo y la organizacin de cache
4

propuesta en el apartado 4 pertenece a este tipo arquitectura. Gestionan una memoria del tipo direct mapped de gran velocidad, en paralelo con una asociativa de tamao pequeo. El comportamiento se asemeja al de una direct mapped con la posibilidad de evitar fallos por conflicto alojando lneas en la asociativa. El comportamiento de este sistema de cache puede verse como si se tuviese una cache asociativa por conjuntos en donde la mayora de los conjuntos son asociativos de una va, mientras que unos pocos conjuntos tienen un grado de asociatividad mayor Algunos ejemplos de augmented caches son: victim cache, asist cache, non temporal buffer (Ntbuffer) y by pass buffer (Bpbuffer) [Jouppy, 98], [Peir, 99]. Se diferencian en su comportamiento lgico, y son similares en cuanto a los mdulos funcionales que las constituyen. La victim cache est basada en la idea de que cuando una lnea es expulsada de la direct mapped, debera moverse a la asociativa para el caso de que se la necesite en un futuro inmediato. En la victim cache se guardan las "vctimas" de los fallos por conflicto de la direct mapped, transformando algunos fallos por conflicto en aciertos en la victim cache. La assist cache es gestionada como un buffer FIFO. Cuando hay un fallo de cache, la lnea se trae a la assist cache y la lnea que se desplaza del buffer FIFO se enva a la direct mapped. En contraste con la victim cache, los datos son llevados primeros a la memoria asociativa y luego transferidos a la direct mapped. Una tercera variante (non temporal buffer) es emplear la direct mapped nicamente para mantener los hot data. Los datos con menor probabilidad de ser accedidos nuevamente se expulsan hacia la asociativa para que no se produzcan conflictos con los primeros. Otra posibilidad (By-Pass buffer) es implementar una Memory Access Table (MAT) para guardar el comportamiento de bloques de memoria y no de lneas.

2.1.2 Tamao de la lnea y prebsqueda


A medida que aumenta el tamao de lnea, la tasa de aciertos aumenta por el principio de localidad como consecuencia de la alta probabilidad de referenciar en un futuro cercano a las palabras vecinas a la que se est accediendo. Sin embargo, la tasa de aciertos decrece si el tamao de la lnea aumenta de tal manera que la probabilidad de utilizar informacin captada se haga menor que la probabilidad de reutilizar la informacin que se reemplaza. Las caches actuales tienen un tamao de lnea entre 8 y 32 palabras, y la relacin entre tamao de la lnea y tasa de acierto es compleja, dependiendo de la localidad del programa que se est ejecutando. Una posibilidad acorde a la propuesta del apartado 4 y que actualmente no implementa ningn procesador es determinar en tiempo de ejecucin y con algn tipo de monitorizacin, el tamao de ideal de la lnea. Con respecto al fetch, es posible traer nicamente la informacin que se necesita fetch on demand- o traer adems lneas que se supone se necesitarn en un futuro prximo prefetch-. Es imposible evitar totalmente el fetch on demand, ya que no se puede predecir durante toda la ejecucin de un programa la siguiente instruccin y los siguientes datos que se necesitarn. El OBL (one block lookhead) es el algoritmo de prefetch ms utilizado en la cache de instrucciones y consiste en traer, la lnea que se necesita y la lnea siguiente. La inclusin de un algoritmo OLB genera resultados bastante similares al aumento del tamao de la lnea. Es necesaria precaucin en la implementacin de polticas de prefetch ms sofisticadas, se puede producir el fenmeno conocido como polucin: las lneas que se traen como resultado de una determinada poltica de prefetch expulsan otras lneas que se necesitan en un futuro cercano, lo que produce un efecto contrario al deseado [Kroft, 98]. El prefetch es una de las razones que determinan la diferencia de prestaciones entre las caches de datos y las de instrucciones. El prefetch para las instrucciones reduce de manera notable los fallos forzosos, pero no existe ningn procesador que haya podido extender esta tcnica a los datos. Este es uno de los puntos clave para intentar una mejora en las prestaciones de las caches de datos: implementar un mecanismo que permita detectar patrones regulares en el acceso a datos
5

(strides fijos o variables que sigan un patrn).

3 Estudio Experimental
Para el estudio experimental del comportamiento de la cache se pueden distinguir en la literatura tres aproximaciones diferentes: el modelado analtico, la monitorizacin hardware y la simulacin software. El modelado analtico flexibiliza el estudio paramtrico del comportamiento de la cache, pero su punto dbil ha sido tradicionalmente la dificultad de obtener resultados generales. Los trabajos basados en esta tcnica, [Fraguela, 99] se refieren solamente a patrones de acceso muy especficos, y no permiten obtener resultados generales. La monitorizacin hardware es una metodologa poco flexible respecto al diseo de los experimentos. La precisin de esta tcnica es una consecuencia de la ausencia de complejas demostraciones matemticas o validaciones de simuladores, procedimientos siempre sujetos a discusin y debate. Algunos microprocesadores proporcionan herramientas de monitorizacin hardware del rendimiento tales como contadores de fallos. Sin embargo, su uso presenta la limitacin de que sobre una arquitectura determinada no es posible medir lo que se desea sino lo que est previsto. El procedimiento elegido en este trabajo es la simulacin software [Roatta, 99], tal vez el mtodo ms extendido para conocer el rendimiento de una cache ante un determinado cdigo, emulando el efecto de la cache en cada uno de los accesos que generara. Los estudios se han efectuado con un simulador desarrollado en la Universidad Autnoma de Barcelona [Moure, 00] a partir de la versin 3.0 del SimpleScalar Tool Set de la Universidad de Wisconsin [Burger, 1997]. Es capaz de simular toda la microarquitectura de un procesador, no solamente la cache, e incluye facilidades para el diseo de experimentos, clculo de estadsticas y presentacin de resultados. Est basado en la microarquitectura del Alpha 21264 y ejecuta cdigo Alpha ISA. El SimpleScalar permite ejecutar un benchmark completo, incluir breakpoints, obtener estadsticas parciales y conocer, en un determinado punto de la ejecucin de un programa, el estado de la microarquitectura. Las modificaciones introducidas al simulador permiten modelar la arquitectura deseada de cache y obtener las estadsticas necesarias. Para asegurar que el benchmark realiza una funcin verdaderamente determinstica, el simulador ejecuta trazas de ficheros .eio en lugar de ficheros en ensamblador. Las trazas eio son una coleccin de las trazas de las operaciones de entrada/salida de manera de que, por ejemplo, una determinada llamada al sistema proporcione el mismo resultado para diferentes ejecuciones.

3.1 Metodologa
Todos los ensayos que se muestran a continuacin corresponden a la cache de datos de primer nivel. La cache de instrucciones se ha comportado de manera ms eficiente y, como ya se ha comentado en prrafos previos, este trabajo intenta buscar soluciones para acercar las prestaciones de la cache de datos a la de la cache de instrucciones. Se han tomado estadsticas para un milln, seis millones y diecisis millones de ciclos. Diecisis millones de ciclos corresponden a entre 20 y 30 millones de instrucciones, dependiendo del CPI del programa. Se han elegido cuatro benchmarks enteros: li, vortex, ijpeg y compress y dos de punto flotante: su2cor y swim [Web page 1] [Web page 2]. El objetivo de estos experimentos es estudiar los distintos grados de localidad que exhiben diferentes benchmarks, para luego evaluar si las diferencias justifican un modelo de cache dinmico. Fueron hechas mediciones para tamaos de cache de 32KBytes y 8Kbytes. En un principio se efectuaron mediciones nicamente para 32Kbytes (que es el tamao de cache que poseen los procesadores actualmente), pero luego se determin que es un tamao demasiado grande para los SPEC95, y se opt por efectuar pruebas con caches similares a las predominantes en el ao que la suite SPEC95 sali al mercado. Esto indica que, tal vez, los SPEC sean un poco antiguos para medir
6

prestaciones en los actuales procesadores. De todas maneras, se han utilizado por la gran aceptacin y reconocimiento que tienen en la comunidad cientfica y porque permiten la comparacin con los resultados obtenidos en otros trabajos. Se efectuaron mediciones de la tasa de aciertos con respecto a cuatro parmetros de cache: Tamao de cache, Poltica de Correspondencia, Tamao de lnea y Poltica de reemplazo

3.2 Resultados obtenidos


Los resultados que muestran a continuacin (figuras 3.1, 3.2, 3.3 y 3.4) corresponden a experimentos realizados sobre la cache de datos. La figura 3.1 muestra los resultados para algunas aplicaciones enteras. Li tiene el aspecto que describen los libros de arquitectura de ordenadores: para un tamao pequeo de cache, aumentos en el grado de asociatividad generan aumentos importantes en la tasa de aciertos y la mayor ganancia se obtiene al pasar de direct mapped a 2 vas; para tamaos de cache mayores las diferencias en tasas de aciertos son menores. Para una cache de datos pequea de 8Kbytes, existe una mejora muy importante del sistema al pasar de una poltica direct mapped a una asociativa por conjuntos de dos vas. Incluso una poltica asociativa por conjuntos de cuatro vas produce un pequeo beneficio, pero grados de asociatividad mayores no se justifican. Para una cache de datos de 32Kbytes, las diferencias de prestaciones entre las distintas organizaciones de
100,00% 95,00% 90,00% 85,00% 80,00% 75,00% (A) (B) (C) (D) (E) (F) (G) (H)

direct mapped 2 vas 4 vas asociativa

A = Li (8KB) B = Li (32KB) C = Vortex (8KB) D = Vortex (32KB) E = Ijpeg (8KB) F = Ijpeg (32KB) G = Compress (8KB) H = Compress (32KB)

Tasa de aciertos = f ( poltica de correspondencia) de una cache de datos (DC) para tamaos de 8kbytes y 32 Kbytes, lnea de 32 bytes, reemplazo LRU.

Figura 3.1 Tasa de ciertos para algunas aplicaciones enteras.

cache son menores. Este es un comportamiento esperado: la eficacia de polticas asociativas se pone de manifiesto en caches pequeas donde existe mayor probabilidad de conflictos. El grfico de Vortex indica gran cantidad de fallos por conflicto: se notan mejoras en las prestaciones al aumentar el grado de asociatividad en ambos tamaos de cache, incluso al pasar de la asociativa de cuatro vas a la totalmente asociativa. Para el programa de compresin de grficos Ijpeg, un tamao de cache de 32Kbytes es muy grande, y todas las arquitecturas y polticas simuladas dan similares tasas de aciertos. Por el contrario, para una cache de 8Kbytes, las organizaciones direct mapped y asociativas por conjunto de 2 y 4 vas son muy ineficientes y los fallos por conflictos muy elevados. El correcto funcionamiento de todas las arquitecturas para un tamao de cache de 32Kbytes es una consecuencia del tamao de las imgenes que maneja el benchmark. Para imgenes de mayor tamao es de esperar en la cache de 32 kbytes los pobres resultados obtenidos en la cache de 8kbytes para imgenes pequeas.

Compress es el benchmark sobre el que se han obtenido los peores resultados. Aqu el problema es, presumiblemente, la falta de localidad de los datos.
100,00% 98,00% 96,00% 94,00% 92,00% 90,00% 88,00% 86,00% 84,00% 82,00% 80,00% (A) (B) (C) (D)

direct mapped 2 vas 4 vas asociativa

A = Su2cor (8KB) B = Su2cor (32KB) C= Swim (8KB) D = Swim (32KB)

Tasa de aciertos = f ( poltica de correspondencia) de una cache de datos (DC) para tamaos de 8kbytes y 32 Kbytes, lnea de 32 bytes, reemplazo LRU

Figura 3.2 Tasa de ciertos para algunas aplicaciones de punto flotante

La figura 3.2 corresponde a dos aplicaciones de punto flotante, Su2cor y Swim. Su2cor es el benchmark con el comportamiento ms extrao; para un tamao de cache de 32Kbytes la cache asociativa tiene una tasa de aciertos inferior a la asociativa por 2 y 4 vas, consecuencia atribuible a la poltica de reemplazo. La nica causa posible de tener prestaciones tan pobres es tener gran cantidad de fallos forzosos: el conjunto de datos sobre los que se trabaja no tiene localidad, y al igual que compress, la solucin sera implementar un prefetch inteligente. Swim es un benchmark que opera sobre datos que prcticamente residen en la cache. La tasa de aciertos es de 99,99% en todos los casos.

100,00% 95,00% 90,00% 85,00% 80,00% 75,00% (A) (B) (C) (D) (E) (F)

random LRU

A = Li B = Vortex C = Ijpeg D = Vortex E = Ijpeg F = Su2cor

Tasa de aciertos = f ( poltica de reemplazo) de una cache de datos (DC) para: tamao de 8Kbytes, lnea de 32 bytes, asociativa por dos vas

Figura 3.3 Influencia de la poltica de reemplazos en la tasa de aciertos.

Si consideramos ahora la influencia de la poltica de reemplazo, podemos ver como la poltica LRU genera unos resultados levemente superiores en todos los casos, tal como se muestra en la figura 3.3. Finalmente, la figura 3.4 presenta la relacin entre la tasa de fallos y el tamao de la lnea. Una longitud de 32 bytes parece ptima para la mayora de las aplicaciones a excepcin de la base de datos Vortex.

100,00% 95,00% 90,00% 85,00% 80,00% 75,00% 70,00% (A) (B) (C) (D) (E) (F)
Tasa de aciertos = f ( tamao de lnea) de una cache de datos (DC) para: tamao de 8Kbytes, asociativa por dos vas, reemplazo LRU

16Bytes 32Bytes

A = Li B = Vortex C = Ijpeg D = Compress E = Su2cor F = Swim

Figura 3.4 Influencia del tamao de la lnea en la tasa de aciertos.

3.3 Anlisis de los resultados obtenidos experimentalmente.


Los datos se deben analizar con la premisa de que cualquier innovacin que resulte en un aumento de las prestaciones, por pequeo que sea el incremento, debe ser tenido en cuenta. Las diferencias de prestaciones entre el procesador y el sistema de memoria son importantes y la brecha es cada vez mayor [Wulf, 95]: la velocidad de los procesadores se incrementa a un ritmo mucho mayor que la disminucin del tiempo de acceso en la SRAM. Este razonamiento lleva a la conclusin que a medida que transcurre el tiempo, para conseguir iguales aumentos en las prestaciones del sistema de cmputo, se necesitan incrementos en la tasa de aciertos cada vez menores. Los resultados obtenidos confirman la hiptesis de que la cache de datos se comporta de manera muy poco eficiente comparndola con la cache de instrucciones. La regla citada en la literatura [Handy, 98] [Hennesy, 94] [Smith, 82] que afirma que la tasa de aciertos de una cache asociativa por 2 vas es aproximadamente igual a la tasa de aciertos de una direct mapped de tamao 2 veces mayor, es muy dependiente de la aplicacin y del tamao absoluto de stas con respecto al conjunto de datos que maneja el programa. La conclusin ms importante es, sin duda, que el factor con mayor peso en la determinacin de las prestaciones de la cache es el tipo de aplicacin. Las caractersticas de comportamiento del programa determinan el rango en el que oscilar la tasa de aciertos. Es imposible sintonizar estticamente una cache para un conjunto de aplicaciones. Esto justifica una propuesta de arquitectura que sea capaz de monitorizar algunas caractersticas del programa para adaptarse a su comportamiento.

4 Arquitectura propuesta: Augmented cache y monitorizacin del sistema.


Se propone una augmented cache capaz de adaptarse dinmicamente a diferentes grados de localidad temporal y espacial. En los apartados siguientes se describe que caractersticas se monitorizan y que contadores se implementan para esta efectuar esta monitorizacin.

4.1 Adaptacin dinmica y localidad temporal.


Si una parte de un programa se ejecuta ms de una vez, podra esperarse un comportamiento similar durante las sucesivas veces que se ejecuta esa zona de cdigo, y por lo tanto podra tambin suponerse similar localidad temporal. El sistema monitoriza el comportamiento del programa y guarda en la cache de segundo nivel la localidad temporal que ha tenido cada lnea la vez anterior que ha estado en la cache de datos. Como el trmino localidad
9

temporal no est definido de forma cuantitativa en la literatura, haremos nuestras definiciones: "localidad temporal que ha tenido la lnea": Concepto definido para lneas que se encuentran en la cache L2 y ya han estado en la cache de datos L1, y es el nmero de veces que el procesador accedi a la lnea con instrucciones de carga o almacenamiento durante el ltimo intervalo de tiempo que ha estado en la cache L1. Si la lnea no ha estado nunca en la cache de datos L1 se asume un valor nulo. Esto se puede gestionar con un contador que se incremente en cada acceso y cuyo valor se guarde cuando la lnea es desalojada hacia la cache L2. "localidad temporal que tiene una lnea": Concepto definido para lneas que se encuentran en la cache L1 y est implementado por un contador que se incrementa de igual manera que el anterior pero se decrementa cada cierto intervalo de tiempo. De esta manera se cuantifica la idea que se tiene de localidad temporal: una lnea tiene mayor localidad temporal cuanto ms veces es accedida y cuanto ms corto es el intervalo de tiempo en el que transcurren los accesos. La determinacin de este intervalo de tiempo es posible nicamente por ensayos experimentales. (por ejemplo: primero sin decrementar, nicamente limpiando en cada acceso a la cache, decrementando luego de un determinado nmero de ciclos, etc.). En el caso de que haya un fallo de cache L2, la lnea se trae con valores iniciales de contadores nulos. Un aspecto importante a tener en cuenta es que cuanto mayor es el tamao de los contadores, mayor es el rea de silicio dedicada a estas tareas de monitorizacin con relacin al rea destinada a guardar los datos del programa. En la simulacin es posible, en una primera aproximacin, hacer los contadores tan grandes como se desee, de manera de evaluar las prestaciones ideales del sistema. Esto fija una cota de funcionamiento ideal. En el modelo propuesto, la cache de datos L1 queda formada por dos mdulos a los que el procesador accede en paralelo: una direct mapped de gran tamao y una pequea memoria asociativa de similar tiempo de acceso. El efecto que se busca es una cache asociativa por conjuntos en donde la mayora de los conjuntos sean de una va (direct mapped) con la capacidad de gestionar dinmicamente el grado de asociatividad de las lneas que lo necesiten. Cuando una lnea es desalojada de la cache de datos L1, se guarda en la cache L2 con informacin sobre el comportamiento que ha tenido durante su localizacin en el nivel superior de la jerarqua de memoria: se guarda la lnea y la localidad temporal que ha tenido la lnea El aspecto ms importante en el diseo de una augmented cache es la eleccin de las polticas de correspondencia y de reemplazo: Poltica de correspondencia: cmo llevar una lnea a la cache de datos? a.- Si hay sitio en la direct mapped, la lnea se coloca en la direct mapped y se inicializan a 1 los contadores de localidad. b.- Si no hay sitio en la direct mapped, se comparan los contadores de localidad temporal, y la lnea de mayor localidad se aloja en la direct mapped, y la de menor localidad en la asociativa. Para esta comparacin se eligen dos contadores distintos: para la lnea que ya est en la cache L1 un contador que indique la localidad temporal que tiene actualmente esa lnea: este contador se incrementa con cada acceso a la lnea, se decrementa cuando transcurre un determinado intervalo de tiempo y se limpia cada vez que la lnea se expulsa de la cache L2 a la cache L1; para la lnea que est en la L2 un contador que indique la localidad que ha tenido durante su ltima estada en la cache L1, se incrementa con cada acceso a la lnea y se limpia cada vez que la lnea se expulsa a la cache L1. Poltica de reemplazo La lnea a reemplazar se elige siempre de la memoria asociativa, y la poltica que se implementa es LRU. Cmo accede el procesador a los datos de la cache ? Si la memoria asociativa tiene un tamao de n lneas, el procesador simultneamente busca entre las n lneas de la totalmente asociativa y la correspondiente lnea de la direct mapped.
10

1. Si la lnea no se encuentra en ninguno de los dos mdulos significa que ha habido un fallo de cache y se inicia el procedimiento explicado en los dos puntos anteriores. 2. Si la lnea se encuentra en la direct mapped, se incrementa el contador. 3. Si la lnea se encuentra en la asociativa, se incrementa su contador, se lleva a la cabeza del stack y se comparan las localidades temporales para hacer un posible swap, de manera de tener siempre en la direct mapped la lnea de mayor localidad. Que contadores implementar para cada lnea ? En un sistema real no es posible tener tantos contadores como se deseara pero s es posible hacerlo en un simulador con el objetivo de conocer si el razonamiento efectuado es vlido y el algoritmo correcto. En un trabajo futuro, se puede estudiar el tamao optimo de los contadores. La posibilidad ms simple: un contador que indique el nmero de veces que se accede a una lnea.La alternativa ideal: un contador1 que con el nmero de veces que se accede a la lnea, un contador2 con el tiempo que ha transcurrido entre el primer y el ltimo acceso, y un contador3 con el tiempo que ha transcurrido desde el primer acceso. Con estos tres contadores se tiene conocimiento de la localidad temporal que ha tenido la lnea ( contador1 dividido contador2 ) y adems la localidad temporal que tiene actualmente ( contador1 dividido contador3). Una alternativa intermedia: un contador que se incremente con el nmero de veces que se accede a una lnea y se decremente cuando transcurre un determinado intervalo de tiempo (donde el valor de este intervalo de tiempo se debe determinar experimentalmente).

4.2 Adaptacin dinmica y localidad espacial.


El tamao de la lnea ha sido ya objeto de anlisis en prrafos anteriores. La idea es tener dos tamaos L y 2L, (por ejemplo 16 o 32 palabras que son los valores reales de las caches actuales) y ajustarlo dinmicamente. El sistema comienza con alguna de las dos longitudes posibles y luego dinmicamente evala si es conveniente mantener o modificar esa longitud de lnea. Cuando el sistema est en la longitud 2L, se mantienen dos bits por lnea que se activan si el procesador accede a cada una de las mitades de la lnea. Estos bits se examinan cuando la lnea es desalojada de la cache de datos L1 hacia la cache L2 para actualizar tres contadores: el contadorA se incrementa si los dos bits estn a uno, el contadorB se incrementa si solo un bit (cualquiera de ambos) est a uno, y el contadorC se incrementa si estn los dos a cero. Cada cierto tiempo (determinar este intervalo de tiempo no es trivial) se comparan estos contadores: Si el contadorA tiene un valor suficientemente grande respecto al contadorB se puede inferir que la longitud de la lnea es adecuada, de lo contrario habra que disminuir la longitud a un valor L. Cuando el sistema est en la longitud L, el procedimiento es exactamente el mismo, pero en este caso un valor del contadorA suficientemente grande respecto al contadorB indicara que lo conveniente es aumentar el tamao de la lnea. Un aspecto muy importante a tener en cuenta es la necesidad de una determinacin experimental de las caractersticas cualitativas mencionados en los dos prrafos anteriores (sufientemente grande y cada cierto tiempo) El contadorC es un indicador de la ineficacia de la poltica de prefetch. El valor de este contador indica la cantidad exacta de lneas que han sido prebuscadas y luego expulsadas sin haber sido utilizadas por el procesador. Actualmente estamos desarrollando la simulacin correspondiente a esta propuesta para proceder a realizar el trabajo experimental de sintonizacin y evaluacin

5. Conclusiones y lneas abiertas


La evaluacin experimental de la cache ha generado gran cantidad de informacin que es posible resumir en los puntos siguientes: El comportamiento de la cache respecto a los diferentes parmetros es, en lneas
11

generales, el esperado: los aciertos aumentan con el aumento del tamao y del grado de asociatividad, la poltica LRU es ligeramente superior a la aleatoria y el tamao de lnea de 32 bytes parece ptimo. El comportamiento de la cache de datos respecto a los programas es heterogneo: LI se comporta como los libros indican. Vortex obtiene sus mejores resultados para el tamao de lnea que los dems programas generan sus peores resultados. En algunos programas, aumentar el grado de asociatividad ms all de dos no produce efectos de consideracin, en otros s. Programas como Compress, Ijpeg y Su2cor tienen tasas de aciertos inaceptablemente bajas, y la modificacin de los parmetros de la cache no produce mejoras significativas. Swim tiene una tasa de aciertos del 99%, independientemente de la configuracin de cache elegida: reside en la cache. Del anlisis de estos resultados se infiere que el comportamiento del programa tiene una influencia muy importante en la tasa de aciertos de la cache. Las caches actuales responden a un modelo, y si este modelo encaja con el modelo de comportamiento del programa, los resultados son buenos. Con programas con patrones de acceso a datos que no responden a este modelo, las prestaciones son muy bajas. Sobre la base del comportamiento exhibido por la cache, hemos desarrollado una propuesta de arquitectura de cache que sea capaz de adaptarse al comportamiento especfico (localidad temporal y espacial), mediante la modificacin de algn elemento/parmetro interno, y esta modificacin ha estado guiada por los valores cuantitativos obtenidos mediante la monitorizacin de las aplicaciones.

Bibliografa
Burger, D., Austin, T.M.: The SimpleScalar Tool Set. Univ. Wisconsin-Madison Computer Science Department, Technical Report TR-1342, 1997. Fraguela Rodrguez B.B., Modelado Analtico del comportamiento de las memorias cach, tesis doctoral, Universidad Da Corua, 1999. Handy J., The Cache Memory Book, Academic Press, 1998 Hennesy J.L., and Patterson D., Computer Architecture: a Quantitative Approach Morgan Kaufmann, 1994 Jouppi N.P., Improving Direct-Mapped Cache Perfomance by the addition of a Small FullyAssociative Cache and Prefetch Buffers, ACM, 25 Years of the International Symposia on Select Computer Architecture, Select Papers,1998, (publicacin original ISCA 17, 1990) Kroft, D., Lockup-Free Instruccin Fetch/Prefetch Cache Organization, , ACM, 25 Years of the International Symposia on Select Computer Architecture, Select Papers,1998, (publicacin original ISCA 8, 1981) Moure, J.C. A Simulator for Superscalar and Multithreaded Processors. Technical Report, University Autonoma of Barcelona. Peir, J., Hsu, W.W., Smith A.J., Functional Implementation Techniques for CPU Cache Memories IEEE Transactions on Computers, 48(2):100-110, February 1999 Roatta S., Evaluacin Experimental de Memorias Caches, tesis de master, Universidad Autnoma de Barcelona, setiembre 1999. Smith A.J., Cache Memories, Computing Surveys, 14(3):473-530, September 1982 Weiss S., Smith J. E., Power and PowerPC: Principles, Arquitecture, Implementation, Morgan Kaufmann, 1994 Wulf A. W., Hitting the Memory Wall: Implications os the Obvious, Computer Arquitecture News, ACM, 23(1):20-24, March 1995. Web pages: [Wp 1] Dasgupta S., Servan-Schreiberb E., Cache Behaviour of the SPEC95 Benchmark Suite, http://http.cs.berkeley.edu/~dasgupta/paper/rep/rep.html [Wp 2] The Spec Organization web page, http://ww.specbench.org/spec/
12

Vous aimerez peut-être aussi