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<N; j++)
for (i=0, i<N; i++)
C[i][j] = A[i][j] + B[i][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.