Beruflich Dokumente
Kultur Dokumente
ISSN: 1560-9146
iifi@unmsm.edu.pe
Universidad Nacional Mayor de San Marcos
Per
SIMULACIN DE LA
M EMORIA CACHE
* Edgar Ruiz L.
* Eduardo Raffo L.
INTRODUCCIN
RESUMEN
El trabajo consiste, en un programa escrito en lenguaje C++; utilizando un compilador Borland
El artculo presenta un programa C++ v.3.5 para Windows y DOS. La carta de estructuras para el programa se muestra en la
que simula la memoria cache Figura 1.
considerando el porcentaje de
xitos y el tiempo medio de acceso
del sistema. El programa OBJETIVO
encuentra el tamao ptimo de la
memoria cache con respecto a l Simular el porcentaje de aciertos acerca de que un dato se encuentre o no en la cache, as como,
tamao de la memoria RAM el cual estimar el tiempo de acceso medio a la cache
puede utilizarse como un criterio
vlido para cuestiones del diseo El mdulo principal del programa es el archivo fuente cache.cpp el cual pide como datos:
de ambas memorias en una
computadora. 1. Ingresar tamao de la memoria.
2. Ingresar tamao de la cache
Palabras Claves: Memoria
cache. Memoria RAM. Distribucin Luego se inicializa la cache, la cual es modelada como una estructura de datos del tipo
uniforme. Tiempo de acceso FIFO(del ingles First In First Out), ms conocida como una cola. Finalmente, simula una
medio. distribucin uniforme de los bloques de memoria principal los cuales tendrn la misma oportunidad
de ingresar a la memoria cache e imprime el porcentaje de xitos y calcula el tiempo de acceso
medio a la cache.
ABSTRACT
Poltica de escritura
Memoria VIII) Escritura inmediata
Principal IX) Post- escritura
X) Escritura nica
Debido a que la memoria principal es relativamente ms grande y Como ya se indico en la introduccin el programa est escrito en
ms lenta, la memoria cache se disea para que sea ms pequea lenguaje de programacin C++, bajo el paradigma de la
y rpida. La cache tiene una copia de partes de la memoria programacin orientada al objeto, y donde se hace uso de libreras
principal. Cuando la CPU intenta leer una palabra de la memoria, (archivos *.h) escritos por los autores, que pueden servir para
se hace una comprobacin para determinar si la palabra est en este y otros programas. La Figura 3 muestra el diagrama de flujo
la cache. Si es as se entrega dicha palabra a la CPU. Si no; un del programa.
bloque de memoria principal, consistente en un cierto nmero de
palabras, se transfiere a la cache y despus la palabra es Despus de leer los datos: tamao de memoria (variable
entregada a la CPU. La Figura 2 muestra la idea bsica de las nmemoria) y tamao del cache (variable ncache) se inicializa
memorias principal y cache. o llena la cache invocando el procedimiento inicia cuya tarea
consiste en insertar el bloque en la cola.
CRITERIOS PARA EL DISEO DE LA CACHE La funcin simula genera muestras para las posiciones en la
memoria RAM utilizando una distribucin uniforme de
Adems del costo total medio por bit para encontrar el tamao probabilidades y as ubicar el bloque j en la cache (ver Figura 5),
"optimo" de la cache, existen las siguientes alternativas de diseo luego averigua si el bloque j pertenece a la cache, de ser as se
de la cache mostradas en el Cuadro 1. incrementa el nmero de aciertos o hit, caso contrario se remueve
el bloque de la cola y se inserta el bloque j.
Para el programa se asume una funcin de correspondencia
directa donde cada bloque K de la RAM tiene la misma oportunidad El sustento de la distribucin uniforme (archivo random.h), est
que otro de ser ingresado a la cache. El algoritmo de sustitucin dado por la siguiente definicin:
empleado es una estructura del tipo FIFO que se traduce en un
Tipo Abstracto de Datos conocido como TAD Cola. Sea:
1
Los fundamentos tericos han sido tomados de la referencia (2)
x ? ?a,b?
citada en la bibliografa.
Inicio
front
rear
Inicializar
...
Cache
1 2 ncache
NULL
muestra NO Reporte
Figura 4. El TAD Cola
< 5000
FIN
SI
Generar una Donde cualquier valor de x tiene igual oportunidad de ser elegido,
posicin en
memoria RAM luego:
?x x?a
x x
j pertenece NO
F ( x) ? ? f ( x)?x ? ?b ? a ? b ? a
a a
a la cache
x ? a ? r * (b ? a )
Figura 3. Diagrama de flujo del programa
RAM
1
2 Bloque 1
2
3
.
.
.
ncache
.
. Bloque
. t
Memoria = 2n -1 Bloque
a=1 x b = nmemoria M
Figura 6. Listado del archivo cache.cpp Figura 7a. Listado del archivo queue2.h
// random.h {
#ifndef RANDOM_H double suma=0;
#define RANDOM_H for(int i=1;i<=12;i++)
#include <math.h> suma+=rnd();
#include "standart.h" return ex+std*(suma-6.0);
double rnd() }
{ // distribucion en forma polar
static int ix=1; double polar(float ex,float std,double& x1,int& flag)
ix*=899; {
if(ix<0) double r1,r2,v1,v2,w,y,pol;
ix+=32767+1; if(!flag) {
return ix/32768.0; do {
} r1=rnd();
// metodo del cuadrado central r2=rnd();
int midsqr(int& ix) // middle_square v1=2*r1-1;
{ v2=2*r2-1;
long int iy; w=pow(v1,2)+pow(v2,2);
iy=(long)ix*ix; }while(!(w<1 && w>0));
iy/=100; y=sqrt(-2*log(w)/w);
ix=(int)iy%1000; pol=v1*y;
return ix; x1=v2*y;
} flag=TRUE;
// metodo de la distribucion uniforme }
double unifr(float a,float b) else {
{ pol=x1;
return a+rnd()*(b-a); flag=FALSE;
} }
// metodo de la distribucion exponencial return ex+std*pol;
double expon(float ex) }
{ double empirica(float* x,float* fx)
double r; {
do { double r=rnd();
r=rnd(); int i=0;
}while(r==0); while(r>=fx[i])
return -ex*log(r); i++;
} return x[i];
// metodo de la distribucion normal }
double normal(float ex,float std) #endif
// El minimo
template <class T> Cuadro 3. Anlisis de Resultados (128000 Mb)
T Min(T a,T b)
{ Tamao de Tamao de
% de xitos
Tiempo de
Memoria RAM Cache Acceso
return (a<b)?a:b; 128000 32 20.48 8.157 seg.
} 128000 64 40.26 6.377 seg.
128000 128 80.24 2.778 seg.
// Swaping: Algoritmo de intercambio 128000 256 96.92 1.277 seg.
128000 512 96.92 1.277 seg.
template <class T> 128000 1024 96.92 1.277 seg.
void SwapTo(T& a,T& b)
{
T temp=a;
Cuadro 3. Anlisis de Resultados (256000 Mb)
a=b; Tamao de Tamao de Tiempo de
% de xitos
b=temp; Memoria RAM Cache Acceso
256000 32 10.32 9.071 seg.
} 256000 64 19.96 8.204 seg.
#endif 256000 128 40.16 6.386 seg.
256000 256 79.14 2.877 seg.
256000 512 93.84 1.554 seg.
256000 1024 93.84 1.554 seg.
Figura 9. Listado del archivo standart.h 256000 2048 93.84 1.554 seg.
Como puede verse en las tablas de resultados se encuentra que que para un determinado tamao de memoria RAM, existe un
para un determinado tamao de memoria RAM, existe un tamao tamao de memoria cache ptimo, asociado por encima del cual
de cache "ptimo" a partir del cual el porcentaje de xitos y el el porcentaje de xitos no mejora. De all que no es conveniente
tiempo de acceso medio del sistema no vara; es decir, permanece aumentar el tamao de la cache por encima del ptimo pues no se
constante aunque se aumente el tamao de la cache. Dichos consigue mejora en el porcentaje de xitos ni en el tiempo de
resultados a modo de resumen se presentan en la Cuadro 5. acceso y el costo de implementar un tamao de cache mayor en
la tarjeta madre aumenta considerablemente.
Cuadro 5. Resumen de resultados ptimos de la cache El programa puede tambin utilizarse para probar con ms de
obtenidos con el programa una cache utilizando la frmula adecuada para los aciertos y los
tiempos medios de acceso a cada uno de ellos.
Tamao de Tamaode Tiempo de
% de xitos
Memoria Cache optimo Acceso
64000 128 98.46 1.139 seg.
128000 256 96.92 1.277 seg. BIBLIOGRAFA
256000 512 93.84 1.554 seg.