/* Programa de ejemplo para generar trazas de memoria multiprocesador para el simulador SMPCache. Este programa genera trazas simulando la copia de un vector a otro, sin tener en cuenta los accesos a instruccion (capturas de instrucciones). Es facil cambiar esta operacion (copia de un vector en otro) por otras operaciones con vectores. Este programa genera los ficheros de traza para configuraciones con 1, 2, 4 y 8 procesadores. */ #include #include const int LVEC = 1000; // Longitud del vector const int NPROC = 8; // Maximo numero de procesadores const int LEC = 2; // Indica Lectura const int ESC = 3; // Indica Escritura // Esta funcion escribe un acceso de memoria con el formato del simulador. // Necesita el fichero de traza, el tipo de acceso a memoria, y la direccion void traza(ofstream &fich,int tipo,void *dir) { fich << tipo << " "; fich.width(8); fich.fill('0'); fich << hex << (int)dir << endl; } int main() { int a[LVEC],b[LVEC]; // Vectores de test ofstream fich[NPROC]; // Ficheros para cada procesador int n,i,proc; char nomfich[33]; for (n=1;n <= NPROC;n*=2) { for (proc=0;proc < n;proc++) { sprintf(nomfich,"c:\\temp\\traza%d_%d.prg",n,proc+1); fich[proc].open(nomfich); } for (i=0;i < LVEC;i++) { a[i]=b[i]; // Operacion de ejemplo //proc=n*i/LVEC; // Reparto en trozos consecutivos proc=i % n; // Reparto entrelazado traza(fich[proc],LEC,&b[i]); // Lectura de b[i] traza(fich[proc],ESC,&a[i]); // Escritura en a[i] } for (proc=0;proc < n;proc++) fich[proc].close(); } return 0; }