作者RebeccaHall (皮卡丘)
看板Grad-ProbAsk
標題[理工] [計組] loop unrolling
時間Wed Nov 23 22:13:06 2011
Code scheduling (一次可執行2指令,ie 左:R-type or branch , 右 lw,sw)
在分發管線中該如何安排
Loop:
lw t0,0(s1)
addu t0,t0,s2
sw t0,0(s1)
addi s1,s1,-4
bne s1,zero,Loop
假設索引值是 4
loop 展開後程式碼如下
lw t0,16(s1)
addu t0,t0,s2
sw t0,16(s1)
lw t1,12(s1)
addu t1,t1,s2
sw t1,12(s1)
lw t2,8(s1)
addu t2,t2,s2
sw t2,8(s1)
lw t1,4(s1)
addu t1,t3,s2
sw t1,4(s1)
addi s1,s1,-16
bne s1,zero,Loop
ans
ALU or Branch | Data transfer instr | cycle
_____________________________________________
Loop:
addi s1,s1,-16 lw t0,0(s1) 1
lw t1,12(s1) 2
addu t0,t0,s2 lw t2,8(s1) 3
addu t1,t1,s2 lw t3,4(s1) 4
addu t2,t2,s2 sw t0,16(s1) 5
addu t3,t3,s2 sw t1,12(s1) 6
sw t2,8(s1) 7
bne s1,zero,Loop sw t3,4(s1) 8
疑問:
1.為什麼 cycle的 lw t0,0(s1) 是用0而不是直的16?而且她的sw是16!!
2.cycle 為什麼一開始就可以 -16? 但是之前把他展開是放最後面才作!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.165.98.107
推 CrazyBoss:因為你執行lw的時候addi-16根本就還沒執行,所以從0開始 11/23 23:57
→ CrazyBoss:展開後的程式碼板來就是錯的所以才要schedule 11/24 00:03
→ RebeccaHall:嗯!! 我再仔細看看 11/25 12:19