Está en la página 1de 4

Ejemplo Optimizaci´on de C´odigo

Francisco Jos´e Ribadas Pena

PROCESADORES DE LENGUAJES 4 o Inform´atica ribadas@uvigo.es

18 de mayo de 2011

c FJRP 2002 ccia pl –

Enunciado

Dado el siguiente fragmento de c´odigo intermedio de 3 direc ciones:

suma = 0

 

i =

1

test:

if i <= 1000 goto cuerpo

cuerpo:

goto fin; t1 = i*9

t2 = A[t1] t3 = t2 * 2 suma = suma + t3

L1:

if i <= 500 goto L1 goto L2 t4 = i * 9 t5 = B[t4] t6 = 5 * valor t7 = t5 + t6 t8 = i * 9 A[t8] = t7

L2:

i =

i

+ 1

fin:

goto test media = suma / 1000

1. Dividir en bloques b´asicos y dibujar el diagrama de flujo.

2. Optimizar el C.I., indicando las optimizaciones realiza das.

Soluci´on

Soluci´on 1. Optimizaci´on de Bucles a ) Factorizaci´on expr. invariantes Mover “ t6 = 5 *

1. Optimizaci´on de Bucles a ) Factorizaci´on expr. invariantes Mover “t6 = 5 * valor” a B1 b ) Reducci´on de intensidad variables de inducci´on

var. inducci´on b´asica: i : 1,2,3, i : 1,2,3,

vars. inducci´on derivadas: t 1 , t 4 , t 8 : (saltan de 9 en 9) t 1 , t 4 , t 8 : (saltan de 9 en 9)

inicializar a 9 en B1

incrementar en 9 en B7

c ) Eliminaci´on variables de inducci´on

Sustituir i por t 1 i por t1

if i <= 500if t1 <= 4500

if i <= 1000if t1 <= 9000

Pueden eliminarse t 4 y t 8 , dejando s´olo t 1 t4 y t8 , dejando s´olo t1

(identif. expr. comunes + propagaci´on de copias) (1)

2. Optimizaciones Locales a ) Reducci´on de intensidad “t3 = t2 * 2t3 = t2 + t2b ) Reutilizaci´on de expr. comunes y propagaci´on de copias

Puede aplicarse con t 1 , t 4 , t 8 [(1) Hecho antes] t1 , t4 , t8 [(1) Hecho antes]

NOTA: siendo estrictos s´olo afectar´ıa a t 4 y t 8 , porque t 1 est´a en otro B.B. t4 y t8 , porque t1 est´a en otro B.B.

C´odigo optimizado

test:

suma = 0 t6 = 5 * valor t1 = 9 if t1 <= 9000 goto cuerpo

cuerpo:

goto fin; t2 = A[t1]

L1:

t3 = t2 + t2 suma = suma + t3 if t1 <= 4500 goto L1 goto L2 t5 = B[t1]

L2:

t7 = t5 + t6 A[t1] = t7 t1 = t1 + 9

fin:

goto test media = suma / 1000