Caché B

256 conjuntos, 1 elemento por conjunto, bloques de 32 bytes, con write-back y write-allocate.
  1. Describa un programa en ensamblador que haga correr la máquina A lo más rápido posible respecto a la máquina B.
  2. Idem pero con la máquina B ganándole a la A.

* En este ejercicio se correrá un programa para evaluar el comportamiento de un sistema de memoria. Un programa en C para UNIX que se encuentra para bajar en la página de la materia, nos permite hacer estas mediciones (stride.c).

En la primera parte este programa se presenta una función para obtener una medición precisa del tiempo. En la segunda parte, un arreglo se lee y escribe en rangos crecientes de longitud $2^{n}$ y por cada uno de estos rangos se hacen accesos de a saltos (strides) cada vez más grandes, desde $2^{0}$ hasta $2^{n-1}$. El código se repite varias veces a fin de obtener mayor precisión en la medición.

La tercera parte repite exactamente el mismo lazo pero no efectua operaciones con la memoria para poder medir y luego restar el tiempo de overhead que tiene la repetición. La parte final imprime los tiempos de acceso de la memoria para cada tamaño y salto.

Resulta importante asegurar que el compilador hace caso al modificador register, a fin de no interferir la memoria con lecto-escrituras de las variables que controlan los lazos.

  1. Grafique los resultados experimentales con el eje $X$ indicando saltos de memoria y el eje $Y$ los tiempo de acceso y una serie por cada tamaño de de caché. Use escala logarítmica para el eje $X$.
  2. ¿Cuántos niveles de caché hay en la jerarquía de memoria?
  3. ¿Cuál es el tamaño de la cache L1? ¿Cuál es su asociatividad?
  4. ¿Cuál es el tamaño de la cache L2 (si existe)? ¿Cuál es su asociatividad?
  5. ¿Hay algo más que usted haya descubierto acerca de la jerarquía de memoria a partir de estos experimentos?



nicolas@turing.fis.uncor.edu