Software pipelining (Organización del Computador II)
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: