--- ADD_ver_10/Attic/Main.c 2006/01/19 17:16:29 1.1 +++ ADD_ver_10/Attic/Main.c 2006/02/15 13:00:30 1.2 @@ -30,7 +30,6 @@ /* */ /********************************************************************/ - /******************************************************************************/ /* MÓDULO: Main.c */ /* */ @@ -82,8 +81,8 @@ int **pizarra_lecturas = NULL; unsigned char *vector = NULL; struct punterosD matriz; -unsigned char **matrizC = NULL; /* matriz de caminos de dependencias */ -char **OrdenParcial = NULL; /* lista de instrucciones según orden parcial de D */ +unsigned char **matrizC = NULL; /* matriz de caminos de dependencias */ +char **OrdenParcial = NULL; /* lista de instrucciones según orden parcial de D */ /* parámetros asociados a las matrices */ parametromatriz *pasos = NULL; @@ -98,132 +97,132 @@ parametromatriz *mediaacoplo = NULL; void ProcesarInstruccion(unsigned int ins, unsigned char secuencia[12], fichainstruccion *tarjetaoperandos) { - AnalizarOperandosIA16(secuencia, tarjetaoperandos); + AnalizarOperandosIA16(secuencia, tarjetaoperandos); - if(configuracion.recuentos == SI) ActualizarRecuentos(tarjetaoperandos); + if(configuracion.recuentos == SI) ActualizarRecuentos(tarjetaoperandos); - if(configuracion.cpi == SI) CalcularCiclosInstruccion(tarjetaoperandos); + if(configuracion.cpi == SI) CalcularCiclosInstruccion(tarjetaoperandos); - if(configuracion.CPImedio == SI) ActualizarCPImedio(tarjetaoperandos->ciclosALU, tarjetaoperandos->ciclosBIU); + if(configuracion.CPImedio == SI) ActualizarCPImedio(tarjetaoperandos->ciclosALU, tarjetaoperandos->ciclosBIU); - if(configuracion.dependencias == SI) - { - AnalizarDependencias(tarjetaoperandos, ins); + if(configuracion.dependencias == SI) + { + AnalizarDependencias(tarjetaoperandos, ins); - AnotarEscrituras(tarjetaoperandos, ins); - AnotarLecturas(tarjetaoperandos, ins); + AnotarEscrituras(tarjetaoperandos, ins); + AnotarLecturas(tarjetaoperandos, ins); - /* si tengo que calcular el tiempo de ejecución */ - /* debo construir un array con el tipo de instrucción */ - /* y su latencia en ciclos */ - } + /* si tengo que calcular el tiempo de ejecución */ + /* debo construir un array con el tipo de instrucción */ + /* y su latencia en ciclos */ + } } void IniciarVentana() { - if(configuracion.dependencias == SI) - { - IniciarPizarras(); - IniciarVectorDependencias(); - IniciarMatricesDependencias(); - if(configuracion.ordenparcial == SI) IniciarListaOrdenParcial(); - if(configuracion.matrizcaminos == SI) IniciarMatrizCaminos(); - if(configuracion.pasoscomputacion == SI) IniciarVariableAgregada(pasos); - if(configuracion.gradoparalelismo == SI) IniciarVariableAgregada(grado);; - if(configuracion.acoplamiento == SI) IniciarVariableAgregada(acoplo); - } + if(configuracion.dependencias == SI) + { + IniciarPizarras(); + IniciarVectorDependencias(); + IniciarMatricesDependencias(); + if(configuracion.ordenparcial == SI) IniciarListaOrdenParcial(); + if(configuracion.matrizcaminos == SI) IniciarMatrizCaminos(); + if(configuracion.pasoscomputacion == SI) IniciarVariableAgregada(pasos); + if(configuracion.gradoparalelismo == SI) IniciarVariableAgregada(grado);; + if(configuracion.acoplamiento == SI) IniciarVariableAgregada(acoplo); + } } void ProcesarVentana() { - if(configuracion.dependencias == SI) - { - GenerarMatrizD(); /* a partir de las matrices desacopladas */ - - /* EXTRAIGO INFORMACIÓN DE LAS MATRICES */ - /* lista orden parcial (la función también puede devolver pasos) */ - if(configuracion.ordenparcial == SI) ListaOrdenParcial(matriz.D, OrdenParcial); - /* matriz de caminos (la función también puede devolver pasos) */ - if(configuracion.matrizcaminos == SI) CalcularMatrizCaminos(matriz.D, matrizC); - /* pasos de computación */ - if(configuracion.pasoscomputacion == SI) - { - /* pasos de computación de todas las matrices de dependencias */ - CalcularPasosComputacion(pasos); - if(configuracion.distribucionpasos == SI) ActualizarHistogramaPasos(); - /* valor medio de pasos de computación */ - CalcularPromedioVariableAgregada(mediapasos, pasos, ventana); - } - /* grado de paralelismo (a partir de los pasos de computación) */ - if(configuracion.gradoparalelismo == SI) - { - /* grado de paralelismo a partir de los pasos de computación */ - CalcularGradoParalelismoNormalizado(pasos, grado); - /* valor medio del grado de paralelismo */ - CalcularPromedioVariableAgregada(mediagrado, grado, ventana); - } - /* acoplamiento */ - if(configuracion.acoplamiento == SI); - { - /* grado de paralelismo a partir de los pasos de computación */ - CalcularAcoplamiento(acoplo); - /* valor medio del grado de paralelismo */ - CalcularPromedioVariableAgregada(mediaacoplo, acoplo, ventana); - } + if(configuracion.dependencias == SI) + { + GenerarMatrizD(); /* a partir de las matrices desacopladas */ + + /* EXTRAIGO INFORMACIÓN DE LAS MATRICES */ + /* lista orden parcial (la función también puede devolver pasos) */ + if(configuracion.ordenparcial == SI) ListaOrdenParcial(matriz.D, OrdenParcial); + /* matriz de caminos (la función también puede devolver pasos) */ + if(configuracion.matrizcaminos == SI) CalcularMatrizCaminos(matriz.D, matrizC); + /* pasos de computación */ + if(configuracion.pasoscomputacion == SI) + { + /* pasos de computación de todas las matrices de dependencias */ + CalcularPasosComputacion(pasos); + if(configuracion.distribucionpasos == SI) ActualizarHistogramaPasos(); + /* valor medio de pasos de computación */ + CalcularPromedioVariableAgregada(mediapasos, pasos, ventana); + } + /* grado de paralelismo (a partir de los pasos de computación) */ + if(configuracion.gradoparalelismo == SI) + { + /* grado de paralelismo a partir de los pasos de computación */ + CalcularGradoParalelismoNormalizado(pasos, grado); + /* valor medio del grado de paralelismo */ + CalcularPromedioVariableAgregada(mediagrado, grado, ventana); + } + /* acoplamiento */ + if(configuracion.acoplamiento == SI); + { + /* grado de paralelismo a partir de los pasos de computación */ + CalcularAcoplamiento(acoplo); + /* valor medio del grado de paralelismo */ + CalcularPromedioVariableAgregada(mediaacoplo, acoplo, ventana); + } - if(configuracion.tiempo == SI) tiempoejecucion = CalcularTiempo(); - } + if(configuracion.tiempo == SI) tiempoejecucion = CalcularTiempo(); + } } void ReservarMemoriaAnalisisDependencias() { - CrearPizarras(); - - CrearVectorDependencias(); - - CrearMatricesDependencias(); - - if(configuracion.ordenparcial == SI) CrearListaOrdenParcial(); - if(configuracion.matrizcaminos == SI) CrearMatrizCaminos(); - if(configuracion.pasoscomputacion == SI) - { - pasos = CrearVariableAgregada(); - IniciarVariableAgregada(pasos); - mediapasos = CrearVariableAgregada(); - IniciarVariableAgregada(mediapasos); - if(configuracion.distribucionpasos == SI) CrearHistogramaPasos(); - } - if(configuracion.gradoparalelismo == SI); - { - grado = CrearVariableAgregada(); - IniciarVariableAgregada(grado); - mediagrado = CrearVariableAgregada(); - IniciarVariableAgregada(mediagrado); - } - if(configuracion.acoplamiento == SI); - { - acoplo = CrearVariableAgregada(); - IniciarVariableAgregada(acoplo); - mediaacoplo = CrearVariableAgregada(); - IniciarVariableAgregada(mediaacoplo); - } + CrearPizarras(); + + CrearVectorDependencias(); + + CrearMatricesDependencias(); + + if(configuracion.ordenparcial == SI) CrearListaOrdenParcial(); + if(configuracion.matrizcaminos == SI) CrearMatrizCaminos(); + if(configuracion.pasoscomputacion == SI) + { + pasos = CrearVariableAgregada(); + IniciarVariableAgregada(pasos); + mediapasos = CrearVariableAgregada(); + IniciarVariableAgregada(mediapasos); + if(configuracion.distribucionpasos == SI) CrearHistogramaPasos(); + } + if(configuracion.gradoparalelismo == SI); + { + grado = CrearVariableAgregada(); + IniciarVariableAgregada(grado); + mediagrado = CrearVariableAgregada(); + IniciarVariableAgregada(mediagrado); + } + if(configuracion.acoplamiento == SI); + { + acoplo = CrearVariableAgregada(); + IniciarVariableAgregada(acoplo); + mediaacoplo = CrearVariableAgregada(); + IniciarVariableAgregada(mediaacoplo); + } } void LiberarMemoriaAnalisisDependencias() { - LiberarMemoriaPizarras(); - LiberarMemoriaVectorDependencias(); - LiberarMemoriaMatricesDependencias(); - - if(configuracion.ordenparcial == SI) LiberarMemoriaListaOrdenParcial(); - if(configuracion.matrizcaminos == SI) LiberarMemoriaMatrizCaminos(); - - if(configuracion.pasoscomputacion == SI) {free(pasos); free(mediapasos);} - if(configuracion.gradoparalelismo == SI) {free(grado); free(mediagrado);}; - if(configuracion.acoplamiento == SI) {free(acoplo); free(mediaacoplo);}; + LiberarMemoriaPizarras(); + LiberarMemoriaVectorDependencias(); + LiberarMemoriaMatricesDependencias(); + + if(configuracion.ordenparcial == SI) LiberarMemoriaListaOrdenParcial(); + if(configuracion.matrizcaminos == SI) LiberarMemoriaMatrizCaminos(); + + if(configuracion.pasoscomputacion == SI) {free(pasos); free(mediapasos);} + if(configuracion.gradoparalelismo == SI) {free(grado); free(mediagrado);}; + if(configuracion.acoplamiento == SI) {free(acoplo); free(mediaacoplo);}; - if(configuracion.distribucionpasos == SI) LiberarMemoriaHistogramaPasos(); + if(configuracion.distribucionpasos == SI) LiberarMemoriaHistogramaPasos(); } @@ -233,266 +232,276 @@ void LiberarMemoriaAnalisisDependencias( void main(int argc, char *argv[]) { /* puntero al fichero origen de datos */ - FILE *origendatos; - /* total instrucciones y ventanas a procesar */ - unsigned long total_ins, total_ven; - /* secuencia en bytes de 2 instrucciones consecutivas */ + FILE *origendatos; + /* total instrucciones y ventanas a procesar */ + unsigned long total_ins, total_ven; + /* secuencia en bytes de 2 instrucciones consecutivas */ unsigned char secuencia[2*BYTES_POR_INSTRUCCION]; /* reservo espacio para una estructura de tipo ficha de instrucción */ fichainstruccion tarjetaoperandos; - unsigned int i, ins; - char cadena[MAX_LINE]; - char mensaje[MAX_LINE]; - unsigned char salvarventana = NO; - char listadoventanas[MAX_LINE]; - - - /* inicio los punteros de las matrices de dependencias a NULL */ - /* es una medida higiénica pero no necesaria ya que la reserva de memoria */ - /* correspondiente a la declaración se hace rellenando con 0s */ - - /* ver si es posible con {NULL, NULL...} */ - IniciarPunterosMatrices(); - - /* NOTIFICACIONES DE SUCESOS Y ERRORES */ - /* inicio el fichero que va a recibir las notificaciones */ - IniciarNotificaciones(); - - /* CONFIGURACIÓN */ - /* cargo la configuración de la aplicación por defecto */ - CargarConfiguracionInicial(); - /* modifico la configuración de la aplicación en función de los argumentos */ - CapturarArgumentos(argc, argv); - - /* escribo la configuración en el fichero de notificaciones */ - if(configuracion.nivelnotificaciones != EX_CFG) NotificarConfiguracion(); - - /* BASES DE DATOS */ - CargarBasesDatos(); - - /* CALCULOS A REALIZAR */ - if(configuracion.recuentos == SI) CrearContadores(); - if(configuracion.dependencias == SI) ReservarMemoriaAnalisisDependencias(); - - /* FICHEROS A CREAR */ - if(configuracion.volcarBD == SI) SalvarBasesDatos(); - if(configuracion.crearficheroconfig == SI) CrearFicheroConfiguracion(); - - /* PROCESAMIENTO */ - if(configuracion.origen == TRAZA) - { - /* determino el rango de instrucciones a analizar */ - DeterminarRango(); - /* determino el número total de instrucciones */ - total_ins = (unsigned long)(configuracion.ultima - configuracion.primera + 1); - /* determino el número de ventanas de instrucciones */ - total_ven = (unsigned long)total_ins/configuracion.ventana; - /* inicio los contadores */ - instruccion = 1; /* cuento las instrucciones desde el '1' */ - ventana = 0; - /* listado de ventanas a volcar */ - strcpy(listadoventanas, configuracion.volcarventana); - - /* abro el fichero de traza */ - if((origendatos = fopen(configuracion.ficherodatos, "rb")) != NULL) - { - sprintf(mensaje, "[Main] El fichero '%s' se ha abierto con éxito", configuracion.ficherodatos); - Notificar(mensaje, NO_ERROR, ECO_NO); - - /* sitúo el puntero del fichero en la instrucción de comienzo */ - fseek(origendatos, (configuracion.primera - 1) * BYTES_POR_INSTRUCCION, SEEK_SET); - - /* leo el formato de la primera instrucción a tratar */ - /* y lo coloco en la parte alta de la secuencia (2ª instrucción) */ - for(i=0; i