<< Chapter < Page Chapter >> Page >

El proceso de aparear las localidades de memoria con las líneas de cache se llama mapeo . Por supuesto, dado que la cache es menor que la memoria principal, tendrá usted que compartir las mismas líneas de cache entre distintas localidades de memoria. En las caches, cada línea mantiene un registro de las direcciones de memoria (conocido como la etiqueta ) a las que representa, y tal vez de cuándo se usaron por última vez. La etiqueta se usa para seguir la pista a cuál área de memoria está almacenada en una línea particular de cache.

La forma en que las localidades de memoria (etiquetas) se mapean a líneas de cache puede tener un efecto benéfico en la forma en que se ejecuta su programa, porque si dos localidades de memoria utilizadas intensamente se mapean a la misma línea de cache, la tasa de fallos será mayor de lo que usted quisiera. Las caches pueden organizarse de varias maneras: mapeadas directamente, completamente asociativas y asociativas en conjunto.

Caches mapeadas directamente

El mapeo directo, tal como se muestra en [link] , es el algoritmo más sencillo para decidir cómo mapear la memoria en la cache. Digamos, por ejemplo, que su computadora tiene 4 KB de cache. En un esquema de mapeo directo, la localidad de memoria 0 se mapea en la localidad 0 de cache, así como las localidades 4K, 8K, 12K, etc. En otras palabras,la memoria se mapea en bloques del mismo tamaño que la cache. Otra forma de verlo es imaginar un resorte de metal con una línea de gis marcada a toda su longitud. Cada vuelta alrededor del resorte, se encuentra la línea de gis en el mismo lugar, módulo la longitud de circunferencia del resorte. Si éste es muy largo, la línea de gis cruza muchas vueltas de la bobina, análogo a como sucede con una memoria grande con muchas localidades mapeándose a la misma línea de cache.

Los problemas devienen cuando a tiempo de ejecución se alternan referencias a memoria en un punto de la cache mapeada directamente, a la misma línea de cache. Cada referencia causa un fallo de caché y reemplaza la entrada que recién se había reemplazado, causando mucha sobrecarga. El término coloquial para este fenómeno es thrashing . Cuando ocurre con demasiada frecuencia, una cache puede ser más una carga que una ayuda, porque cada falla de la caché requiere que una línea completa se llene nuevamente -una operación que mueve más datos que lo que supondría meramente satisfacer directamente la referencia desde la memoria principal. Es fácil construir un caso patológico que cause thrashing en una cache de 4 KB mapeada directamente:

Muchas direcciones de memoria mapeadas a la misma línea de cache.

Esta figura contiene dos gráficas. La primera es una línea gris horizontal, con manchas distribuidas uniformemente a lo largo de la línea y rotuladas 0K, 4K, 8K, 12K y 16K. Después de 16K, la línea horizontal se espacia y se vuelve punteada. La segunda gráfica es una espiral vertical, y cada bucle de la espiral está rotulado desde arriba hasta abajo, 0K, 4K, 8K, 16K, 20K, 24K y 32K. En el centro de la espiral hay un segmento sombreado que recorre todos los bucles, rotulado como línea de cache.


REAL*4 A(1024), B(1024) COMMON /STUFF/ A,BDO I=1,1024 A(I) = A(I) * B(I)END DO END

Ambos arreglos, A y B, tiene exactamente 4 KB de almacenamiento, y su inclusión juntos en COMMON garantiza que los arreglos inician exactamente con 4 KB de distancia en memoria. En una cache de 4KB con mapeo directo, la misma línea que se usa para A(1) se emplea también para B(1), y lo mismo sucede con A(2) y B(2), etc., de tal suerte que las referencias alternadas causan repetidas fallas de cache. Para solucionarlo, debe bien sea ajustar el tamaño del arreglo A, o poner algunas otras variables adentro de COMMON , en medio de ambas. Por esta razón uno debe generalmente evitar tamaños de arreglo cercanos a potencias de dos.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Cómputo de alto rendimiento. OpenStax CNX. Sep 02, 2011 Download for free at http://cnx.org/content/col11356/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Cómputo de alto rendimiento' conversation and receive update notifications?

Ask