sábado, 12 de octubre de 2013

Jerarquía de memoria

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:



MemoriaNombreFrecuencia (RAM)Frecuencia (RAM)</th>Velocidad
DDR200PC1600200 MHz100 MHz1,6 GB/s
DDR266PC2100266 MHz133 MHz2,1 s
DDR333PC2700333 MHz166 MHz2,7 s
DDR400PC3200400 MHz200 MHz3,2 s
DDR433PC3500433 MHz217 MHz3,5 s
DDR466PC3700466 MHz233 MHz3,7 s
DDR500PC4000500 MHz250 MHz4 s
DDR533PC4200533 MHz266 MHz4,2 s
DDR538PC4300538 MHz269 MHz4,3 s
DDR550PC4400550 MHz275 MHz4,4 s
DDR2-400PC2-3200400 MHz100 MHz3,2 s
DDR2-533PC2-4300533 MHz133 MHz4,3 s
DDR2-667PC2-5300667 MHz167 MHz5,3 s
DDR2-675PC2-5400675 MHz172,5 MHz5,4 s
DDR2-800PC2-6400800 MHz200 MHz6,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.













No hay comentarios:

Publicar un comentario