Software pipelining (Organización del Computador II)

De Cuba-Wiki
Revisión del 15:39 9 nov 2006 de 201.255.26.53 (discusión)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)

Enunciado: v[n]-> 16bits w[n]-> 16bits x[n]-> 16bits

x[i]=(v[i]+w[i])^2

//*******************************************************// Pseudo Codigo:

for (i=0;i<n i++) x[i]= (v[i]+w[i])(v[i]+w[i]) // 32=v, 33=w, 34=x, 35=n, 36=i

//*******************************************************// Codigo:

alloc r20=ar.pfs, 4,3,0,0 add r36= r0,r0 ciclo: cmp.lt p2,p3=r36,r35 (p3) br.cond fin

ld2 r37=[r32],2 // CARGA ld2 r38= [r33],2 //

add r37= r37,r38 //SUMA

pmpy2.r r37=r37,r37 //PRODUCTO

st2 [r34]=r37,2 // GUARDADO

br.cond ciclo

fin:

//*******************************************************// Optimizacion con rotacion:

V[i] ->2reg w[i] ->2reg Suma ->2reg Producto ->2reg

Empiezo de R32 q son los rotativos

r32 r33 r34 r35 r36 r37 r38 r39

|_vi|___|wi_|___|___|___|___|___|___|


r33 r34 r35 r36 r37 r38 r39 r32

|v0_|w1_|w0_|___|___|___|___|v1_|


ld2 r32=[--],2 // 1ªetapa ld2 r34= [--],2 //

add r36= r33,r35 // 2ª etapa

pmpy2.r r38=r37,r37 // 3ª etapa

st2 [--]=r39,2 // 4ª etapa

ctop y cexit, pone en 1 pr63 y lo rota (pr16 a pr63 se va poniendo en 1s)(uso para controlar q se ejecuta y q no) wtop y wexit, , pone en 0 pr63 y lo rota (pr16 a pr63 va poniendo ceros)


alloc r20= ar.pfs,4,9,0,8 // los de rotacion siempre multiplo de 8

mov ar.ec= 4 mov pr.rot= 0x-----

ciclo: cmp.lt p16,p3=--,-- (p16) br.wexit fin


(p17)ld2 r32=[--],2 // 1ªetapa (p17)ld2 r34= [--],2 //

(p18)add r36= r33,r35 // 2ª etapa

(p19)pmpy2.r r38=r37,r37 // 3ª etapa

(p20)st2 [--]=r39,2 // 4ª etapa

add --= 1,-- br.cond.ciclo fin: [edit] Orga2 pipeline, clase 2/11

Enunciado: v[n]-> 16bits w[n]-> 16bits x[n]-> 16bits

x[i]=(v[i]+w[i])^2

//*******************************************************// Pseudo Codigo:

for (i=0;i<n i++) x[i]= (v[i]+w[i])(v[i]+w[i]) // 32=v, 33=w, 34=x, 35=n, 36=i

//*******************************************************// Codigo:

alloc r20=ar.pfs, 4,3,0,0 add r36= r0,r0 ciclo: cmp.lt p2,p3=r36,r35 (p3) br.cond fin

ld2 r37=[r32],2 // CARGA ld2 r38= [r33],2 //

add r37= r37,r38 //SUMA

pmpy2.r r37=r37,r37 //PRODUCTO

st2 [r34]=r37,2 // GUARDADO

br.cond ciclo

fin:

//*******************************************************// Optimizacion con rotacion:

V[i] ->2reg w[i] ->2reg Suma ->2reg Producto ->2reg

Empiezo de R32 q son los rotativos

r32 r33 r34 r35 r36 r37 r38 r39

|_vi|___|wi_|___|___|___|___|___|___|


r33 r34 r35 r36 r37 r38 r39 r32

|v0_|w1_|w0_|___|___|___|___|v1_|


ld2 r32=[--],2 // 1ªetapa ld2 r34= [--],2 //

add r36= r33,r35 // 2ª etapa

pmpy2.r r38=r37,r37 // 3ª etapa

st2 [--]=r39,2 // 4ª etapa

ctop y cexit, pone en 1 pr63 y lo rota (pr16 a pr63 se va poniendo en 1s)(uso para controlar q se ejecuta y q no) wtop y wexit, , pone en 0 pr63 y lo rota (pr16 a pr63 va poniendo ceros)


alloc r20= ar.pfs,4,9,0,8 // los de rotacion siempre multiplo de 8

mov ar.ec= 4 mov pr.rot= 0x-----

ciclo: cmp.lt p16,p3=--,-- (p16) br.wexit fin


(p17)ld2 r32=[--],2 // 1ªetapa (p17)ld2 r34= [--],2 //

(p18)add r36= r33,r35 // 2ª etapa

(p19)pmpy2.r r38=r37,r37 // 3ª etapa

(p20)st2 [--]=r39,2 // 4ª etapa

add --= 1,-- br.cond.ciclo

fin: