Optimización de Ciclos de CPU en Operaciones con Registros: Técnicas de Planificación y Desenrrollamiento
Enviado por Chuletator online y clasificado en Electricidad y Electrónica
Escrito el en español con un tamaño de 4,18 KB
Ejercicio 1
Apartado 1
Se requieren 26 ciclos, contando las detenciones identificadas.
Bucle:
l.d $f0, 0($r1)
l.d $f2, 0($r2)
l.d $f4, 0($r3)
- <stall> x 2
mul.d $f0, $f0, $f2
- <stall> x 8
add.d $f0, $f0, $f4
- <stall> x 5
s.d $f0, 0($r4)
addi $r1, $r1, 8
addi $r2, $r2, 8
addi $r3, $r3, 8
addi $r4, $r4, 8
bne $r1, $r0, bucle
Apartado 2
Planificando, se puede reducir a 22 ciclos por iteración.
Bucle:
l.d $f0, 0($r1)
l.d $f2, 0($r2)
l.d $f4, 0($r3)
addi $r1, $r1, 8
addi $r2, $r2, 8
mul.d $f0, $f0, $f2
addi $r3, $r3, 8
addi $r4, $r4, 8
- <stall> x 6
add.d $f0, $f0, $f4
- <stall> x 5
s.d $f0, -8($r4)
bne $r1, $r0, bucle
Apartado 3
Bucle:
l.d $f0, 0($r1)
l.d $f2, 0($r2)
l.d $f4, 0($r3)
l.d. $f6, 8($r0)
l.d $f8, 8($r0)
l.d $f10, 8($r0)
mul.d $f0, $f0, $f2
addi $r1, $r1, 8
mul.d $f6, $f6, $f8
addi $r2, $r2, 16
addi $r3, $r3, 16
addi $r4, $r4, 16
- <stall> x 3
add.d $f0, $f0, $f4
- <stall>
add.d $f6, $f6, $f10
- <stall> x 3
s.d $f0, -16($r4)
- <stall>
s.d $f6, -8($r4)
bne $r1, $r0, bucle
En total, se requieren 25 ciclos para ejecutar dos iteraciones. Esto da lugar a 12,5 ciclos por iteración.
Para un factor de 4 se tiene:
Bucle:
l.d $f0, 0($r1)
l.d $f2, 0($r2)
l.d $f4, 0($r3)
l.d. $f6, 8($r1)
l.d $f8, 8($r2)
l.d $f10, 8($r3)
l.d $f12, 16($r1)
l.d $f14, 16($r2)
l.d $f16, 16($r3)
l.d. $18, 24($r1)
l.d $f20, 24($r2)
l.d $f22, 24($r3)
mul.d $f0, $f0, $f2
mul.d $f6, $f6, $f8
mul.d $f12, $f12, $f14
mul.d $f18, $f18, $f20
addi $r1, $r1, 32
addi $r2, $r2, 32
addi $r3, $r3, 32
addi $r4, $r4, 32
- <stall>
add.d $f0, $f0, $f4
add.d $f6, $f6, $f10
add.d $f12, $f12, $f16
add.d $f18, $f18, $f22
- <stall> x 2
s.d $f0, -32($r4)
s.d $f6, -24($r4)
s.d $f12, -16($r4)
s.d $f18, -8($r4)
bne $r1, $r0, bucle
En total, 32 ciclos para cuatro iteraciones. Se tienen 8 ciclos por iteración.
Para un factor de 8, se requeriría un número excesivo de registros y no sería factible. Aun así, si se dispone de suficiente tamaño, saldrían en total 53 ciclos. Se tienen 6.625 ciclos por iteración.
Apartado 4
Puede observarse que, al aumentar el factor de desenrrollamiento, se reduce el número de ciclos por iteración. Esto se debe a que se consigue ocultar mejor las detenciones con trabajo productivo, realizándose un uso más eficaz del procesador. No obstante, debe tenerse en cuenta la creciente presión sobre el banco de registros, por lo que un factor de desenrrollamiento alto puede resultar excesivo.