Jerarquía de memoria
Se conoce como jerarquía de memoria a la organización piramidal de la memoria en niveles que tienen los ordenadores. Su objetivo es conseguir el rendimiento de una memoria de gran velocidad al coste de una memoria de baja velocidad, basándose en el principio de cercanía de referencias.
Los puntos básicos relacionados con la memoria pueden resumirse en:
Cantidad
Velocidad
Coste
La cuestión de la cantidad es simple, cuanto más memoria haya disponible, más podrá utilizarse. La velocidad óptima para la memoria es la velocidad a la que el procesador puede trabajar, de modo que no haya tiempos de espera entre cálculo y cálculo, utilizados para traer operandos o guardar resultados. En suma, el coste de la memoria no debe ser excesivo, para que sea factible construir un equipo accesible.
Como puede esperarse los tres factores compiten entre sí, por lo que hay que encontrar un equilibrio. Las siguientes afirmaciones son válidas:
Diagrama de la jerarquía de memoria.
Por qué funciona la jerarquía ?
♣ Principio de Localidad:
♦ Los programas acceden a una porción relativamente
pequeña del espacio de direcciones en un determinado
lapso de tiempo.
♦ Localidad temporal
• Si un ítem es referenciado en determinado momento, es
común que vuelva a ser referenciado poco tiempo después
♦ Localidad Espacial
• Cuando un ítem es referenciado en determinado momento,
es común que los ítems con direcciones “cercanas”también
sea accedidos poco tiempo después.
Jerarquía de Memoria:
Cómo Funciona?
♣ Localidad Temporal
♦ Mantener los datos más recientemente accedidos
“cercanos” al procesador
♣ Localidad Espacial
♦ Mover bloques de palabras contiguas al nivel superior
Como se maneja la jerarquía?
♣ Registros <-> Memoria
♦ por el compilador (programador?)
♣ Cache <-> memoria
♦ por el hardware
♣ Memoria <-> discos
♦ por el hardware y el sistema operativo (memoria virtual)
por el programador (archivos)
Cuadro de resumen
El siguiente cuadro muestra la equivalencia entre la frecuencia de la placa madre (FSB), la frecuencia de la memoria (RAM) y su velocidad:
Memoria | Nombre | Frecuencia (RAM) | Frecuencia (RAM)</th> | Velocidad |
DDR200 | PC1600 | 200 MHz | 100 MHz | 1,6 GB/s |
DDR266 | PC2100 | 266 MHz | 133 MHz | 2,1 s |
DDR333 | PC2700 | 333 MHz | 166 MHz | 2,7 s |
DDR400 | PC3200 | 400 MHz | 200 MHz | 3,2 s |
DDR433 | PC3500 | 433 MHz | 217 MHz | 3,5 s |
DDR466 | PC3700 | 466 MHz | 233 MHz | 3,7 s |
DDR500 | PC4000 | 500 MHz | 250 MHz | 4 s |
DDR533 | PC4200 | 533 MHz | 266 MHz | 4,2 s |
DDR538 | PC4300 | 538 MHz | 269 MHz | 4,3 s |
DDR550 | PC4400 | 550 MHz | 275 MHz | 4,4 s |
DDR2-400 | PC2-3200 | 400 MHz | 100 MHz | 3,2 s |
DDR2-533 | PC2-4300 | 533 MHz | 133 MHz | 4,3 s |
DDR2-667 | PC2-5300 | 667 MHz | 167 MHz | 5,3 s |
DDR2-675 | PC2-5400 | 675 MHz | 172,5 MHz | 5,4 s |
DDR2-800 | PC2-6400 | 800 MHz | 200 MHz | 6,4 s |
Sincronización (tiempos)
No es poco común ver valores como "3-2-2-2" ó "2-3-3-2" para describir los parámetros de la memoria de acceso aleatorio. Esta sucesión de cuatro cifras describe la sincronización de la memoria (tiempo); es decir, la secuencia de ciclos de reloj necesaria para acceder a la información almacenada en la RAM. Las cuatro cifras corresponden, en orden, a los siguientes valores:
- Demora de CAS o latencia de CAS (CAS significa Señalizador de Direccionamiento en Columna): es el número de ciclos de reloj que transcurre entre el envío del comando de lectura y la llegada de la información. En otras palabras, es el tiempo necesario para acceder a una columna.
- Tiempo de precarga de RAS (conocido como tRP; RAS significaSeñalizador de Direccionamiento en Fila): es el número de ciclos de reloj transcurridos entre dos instrucciones de RAS, es decir, entre dos accesos a una fila.
- Demora de RAS a CAS (a veces llamada tRCD): es el número de ciclos de reloj correspondiente al tiempo de acceso de una fila a una columna.
- Tiempo activo de RAS (a veces denominado tRAS): es el número de ciclos de reloj correspondiente al tiempo de acceso a una columna.
Las tarjetas de memoria están equipadas con un dispositivo llamado SPD(Detección de Presencia en Serie), el cual permite al BIOS averiguar los valores de ajuste nominales definidos por el fabricante. Se trata de una EEPROM, cuya información puede cargarse en el BIOS si el usuario elige el ajuste "auto".
Principio de localidad
El principio de
localidad espacial dice que si el procesador accede a una posición de la memoria principal, lo más probable es que necesite acceder a una posición de memoria cercana a esa más adelante.
El principio de
localidad temporal dice que si el procesador accede a una posición de la memoria principal lo más probable es que acceda nuevamente a esa posición de memoria pronto.
Bajo estos principios son diseñadas las memorias caché
En los programas la localidad surge de las estructuras más sencillas y naturales. Por ejemplo, un bucle es una estructura en la que es sencillo explotar la localidad temporal, los bloques de código que se ejecutan secuencialmente hacen que sea fácil explotar la localidad espacial, etc.
La jerarquía de memoria tiene sentido gracias al principio de localidad. El procesador encuentra muy a menudo en la memoria caché los datos que referencia (a pesar del reducido tamaño de esta memoria), porque en esta memoria están los datos e instrucciones que ha utilizado recientemente y los que están cercanos a ellos.
Pero para que el funcionamiento de la jerarquía sea óptimo, los códigos y compiladores deben tener en cuenta el principio de localidad. Si por ejemplo, los elementos de una matriz se almacenan en memoria por filas, un código que accediera por filas a la matriz estaría aprovechando la localidad mientras que un código que lo hiciera por columnas estaría provocando constantes fallos de memoria y empeorando considerablemente los tiempos de ejecución.
Conclusión: cuidado con los patrones de acceso de vuestros códigos a memoria, pueden ser un factor muy importante en el rendimiento final que obtengáis al ejecutarlos. Para empezar, es un buena práctica conocer el tamaño exacto de los diferentes niveles de caché de vuestro procesador y así estimar el tamaño óptimo de los bloques de información con los que trabajáis.
La instrucción de ensamblador CPUID permite obtener esta información, os dejo este enlace para que
podáis descargar benchmarks sencillos basados en ella y así poder caracterizar vuestra jerarquía de memoria:
Cuatro tipos de memorias
1. MEMORIA RAM
RAM : Siglas de (Random Access Memory), un tipo de memoria a la que se puede acceder de forma aleatoria; esto es, se puede acceder a cualquier byte de la memoria sin pasar por los bytes precedentes. RAM es el tipo más común de memoria en las computadoras y en otros dispositivos, tales como las impresoras.
Hay dos tipos básicos de RAM:
♦
DRAM (Dynamic RAM), RAM dinámica
♦
SRAM (Static RAM), RAM estática
2. MEMORIA ROM
ROM (memoria inalterable): Los ordenadores contienen casi siempre una cantidad pequeña de memoria de solo lectura que guarde las instrucciones para iniciar el ordenador. En la memoria ROM no se puede escribir.
3. MEMORIA PROM
PROM (memoria inalterable programable): Un PROM es un chip de memoria en la cual usted puede salvar un programa. Pero una vez que se haya utilizado el PROM, usted no puede reusarlo para salvar algo más. Como las ROM, los PROMS son permanentes.
4. MEMORIA EPROM
EPROM (memoria inalterable programable borrable): Un EPROM es un tipo especial de PROM que puede ser borrado exponiéndolo a la luz ultravioleta.