**66.20 Organización de Computadoras - Primer Parcial** \\ **Práctica: Jueves** \\ 2 de noviembre de 2006 \\ - ** Conjunto de Instrucciones **\\ Dadas las arquitecturas: //acumulador, memoria-memoria, pila, carga-almacenamiento//. Asumir que todas las instrucciones ocupan una cantidad entera de bytes de longitud, el //opcode// siempre ocupa 1 byte, el direccionamiento a memoria es directo (o absoluto), y las variables A, B, C y D inicialmente están en memoria. - Invente sus propios mnemónicos de lenguaje //assembly// y escriba, para cada arquitectura, el equivalente al siguiente código (optimizar reutilizando operandos en memoria interna del procesador, siempre que se pueda):\\ A = B + C;\\ B = A + C;\\ D = A - B; - El código dado se ejecuta en un procesador empotrado, con direcciones y operandos de 16-bits. En el caso de //carga-almacenamiento//, asumir que se dispone de 16 registros de propósito general. Para cada arquitectura, responder: ¿Cuántos bytes de instrucciones se traen al procesador?¿Cuántos bytes de datos son transferidos entre procesaros y memoria? - ** Principios Cuantitativos del Diseño **\\ El siguiente fragmento en //assembly// de MIPS32 sumaria un arreglo de 10.000 valores enteros: \\ '' li $t0, 0 #$t0 -> acumulador \\ li $t1, 0 #$t1 -> índice \\ loop: mul $t2, $t1, 4 #$t2 -> índice escalado x4\\ lw $t3, array($t2) \\ add $t0, $t0, $t3 \\ beq $t1, 9999, fin \\ addu $t1, $t1, 1 \\ j loop \\ fin ...'' - Calcular el CPI promedio, considerando los siguientes datos:\\ ^ Tipo de Instrucción ^ Ciclos de reloj ^ | Aritmético/Lógica | 1 | | Carga/Almacenamiento | 1.9 | | Salto Condicional tomado | 2 | | Salto Condicional no tomado | 1.5 | | Salto Inondicional | 1.2 | - - - - ¿Cuál es el //speedup// global si una mejora permite ejecutar las instrucciones de carga-almacenamiento en 1.3 ciclos de reloj?\\ - ** Optimización de Software y Sistema de Memoria **\\ Dado el siguiente programa en lenguaje C: \\ #define N 1024 long A[N][N], B[N][N], C[N][N]; register int i, j; for (j=0, j Considerar una organización de caché de datos L1 2WSA de 4-KB con línea de 32 bytes y política de reemplazo LRU. El sistema de memoria una //write through// ante una escritura, y oplítica //no-write allocate// antes un desacierto de escritura. \\ El lenguaje C utiliza el esquema //row-major order// para almacenamiento de arreglos multidimensionales. El tipo ocupa 4 bytes. \\ - Asumiendo que los elementos de las matrices no están inicalmente en la caché, que ambas están ubicadas una a continuación de la otra en memoria principal, y sin considerar los accesesos a otras variables ¿cuá es la tasa de desaciertos? \\ - Se pretende disminuir __//considerablemente//__ la tasa de desaciertos aplicando una única técnica de optimización. Determine qué optimización (de las estudiadas en el curso) aplicaría, explique en qué consiste , reescriba el código anterior y vuelva a calcular la tasa de desaciertos para el programa optimizado.