COGNOMS: GRUP: NOM:
EXAMEN FINAL D’EC
10 de gener de 2019
L’examen consta de 9 preguntes, que s’han de contestar als mateixos fulls de l’enunciat. No obli- dis posar el teu nom i cognoms a tots els fulls. La durada de l’examen és de 180 minuts. Les notes,
la solució i el procediment de revisió es publicaran al Racó abans del dia 17 de gener.
Pregunta 1. (1,6 punts)
Donades les següents declaracions de variables globals en assemblador del MIPS, que s’ubiquen en memòria a partir de l’adreça 0x10010000:
.data
a: .asciiz “abcd”
b: .half 10, -7
c: .word b
d: .byte 0x03
.align 1
e: .space 4
f: .word 256
# codi ASCII ’a’ = 0x61
a) (0,4 pts) Omple la següent taula amb el contingut de la memòria, indicant el valor de cada byte EN HEXADECIMAL, i deixant EN BLANC les posicions no ocupades per cap dada.
@Memòria
Dada
0x10010000
61
0x10010001
62
0x10010002
63
0x10010003
64
0x10010004
00
0x10010005
0x10010006
0A
0x10010007
00
@Memòria
0x10010008
0x10010009
0x1001000A
0x1001000B
0x1001000C
0x1001000D
0x1001000E
0x1001000F
Dada
F9
FF
06
00
01
10
@Memòria
0x10010010
0x10010011
0x10010012
0x10010013
0x10010014
0x10010015
0x10010016
0x10010017
Dada
03
00
00
00
00
@Memòria
Dada
0x10010018
00
0x10010019
01
0x1001001A
00
0x1001001B
00
0x1001001C
0x1001001D
0x1001001E
0x1001001F
b) (0,4pts)Quinéselvalorde$t0enhexadecimaldesprésd’executarelsegüentcodi? la $t0, c
lw $t0, 0($t0)
lh $t0, 2($t0)
$t0 =
c) (0,4 pts) Quin és el valor final de $t0 i de $t1 en hexadecimal després d’executar el següent codi?
li $t0, 2563 li $t1, 10 div $t0, $t1 mflo $t0
mfhi $t1
$t0 = $t1 =
0x00000100
0x00000003
-1-
0xFFFFFFF9
d) (0,4pts)Quinéselvalorfinalde$t0enhexadecimaldesprésd’executarelsegüentcodi? li $t0, -3
sra $t1, $t0, 31
xor $t0, $t0, $t1
subu $t0, $t0, $t1 sll $t1, $t1, 31 or $t0, $t0, $t1
Pregunta 2. (1,3 punts)
$t0 =
Considerem un computador amb un processador MIPS funcionant a una freqüència de 0,5Ghz, i que dissipa una potència de 10 W. Suposem que la cache d’instruccions és ideal (sempre encerta), i que la cache de dades té un temps de servei en cas d’encert th = 1 cicle. El temps necessari per copiar un bloc de memòria principal a cache és tblock = 99 cicles. Els CPI dels diversos tipus d’instruccions (en absència de fallades) són:
A través de simulacions amb un programa de test hem mesurat una taxa de fallades de la cache de dades del 4,4% (és a dir, m = 0,044). Totes les referències a memòria són lectures. El nombre d’instruccions executades és:
a) (0,4 pts) Calcula el CPIideal del programa (CPI promig amb cache ideal sense fallades) CPIideal =
b) (0,4pts)Calcula,ensegons,eltempsd’execució(incloent-hifalladesdecache) texe = s
c) (0,1 pts) Calcula l’energia total consumida durant l’execució del programa, en Joules E=J
d) (0,4pts)Calcula,encicles,eltempsd’accésmitjàamemòriadelsloadsperaaquestprograma tam = cicles
Salts
Loads
Resta d’instruccions
CPI
3
5
2
Salts
Loads
Resta d’instruccions
núm. instr.
1·109
3·109
6·109
86,4
-2-
0x80000003
3
864
5,4
COGNOMS: GRUP: NOM:
Pregunta 3. (1,4 punts)
Donades les següents declaracions en C:
int *pglob; /* variable global */
int f2(int x, char *y, char *z); /* prototipus de f2 */
char f1(int a, char b[][5], int c, int *d) {
char v[10];
if ((c < 0)||(c >= a))
c = 0;
*pglob = f2(*d, &b[3][0], v);
return v[c];
}
A continuació es mostra una traducció de la funció f1 a llenguatge MIPS que està incompleta. Llegiu-la amb atenció, i completeu les caixes per tal que la traducció sigui correcta.
$sp, $sp, -20 sw $ra, 16($sp)
$a2, $zero,
$a2, $a0, move $a2, $zero
move $s0, $a2
# Passar paràmetres: f2(*d, &b[3][0], v)
jal f2
# Emmagatzemar resultat: *pglob = f2(…)
# Sentència final: return v[c];
lw $s0, 12($sp) lw $ra, 16($sp) addiu $sp, $sp, 20 jr $ra
f1: addiu
sw $s0, 12($sp)
blt
blt
then: endif:
then
# c<0? # c>=a?
endif
# copiar en registre segur
lw $a0, 0($a3) addiu $a1, $a1, 15 move $a2, $sp
la $t0, pglob lw $t1, 0($t0) sw $v0, 0($t1)
addu $t0, $sp, $s0 lb $v0, 0($t0)
-3-
Pregunta 4. (1,2 punts)
Considera la següent declaració MIPS de variables globals:
a: .word 0xCC800000
b: .word 0x4C800000
c: .float 1.0
Suposant que s’executa el següent codi:
la $t0, a lwc1 $f0, 0($t0) la $t0, b lwc1 $f2, 0($t0) la $t0, c lwc1 $f4, 0($t0)
Es demana que contesteu quin serà el valor final a $f6 en hexadecimal després de l’execució dels següent codis:
a) (0,6 pts)
add.s $f6, $f0, $f2 add.s $f6, $f6, $f4
b) (0,6pts)
add.s $f6, $f2, $f4 add.s $f6, $f0, $f6
$f6 =
$f6 =
-4-
0x3f800000
0x00000000
COGNOMS: GRUP: NOM:
Pregunta 5. (0,8 punts)
Considerant la declaració de la matriu global A
int A[N][N];
el següent codi en llenguatge C copia la triangular superior cap a la inferior d’aquesta matriu quadrada:
int i,j;
for (i=0; i