看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《luckyburgess (the one)》之銘言: : 想請問一下94年交大資工計組的第9題 : 那邊是怎麼解出來的 : http://www.lib.nctu.edu.tw/n_exam/exam94/isc/7006.pdf : 感謝! Loop: lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $zero, Loop ALU or branch inst. Data transfer inst. Loop: addi $s1, $s1, -16 lw $t0, 0($s1) (blank) lw $t1, 12($s1) (1) lw $t2, 8($s1) (2) (6) addu $t2, $t2, $s2 (7) (3) (8) (4) (9) (5) sw $t3, 4($s1) ================================================================ 由 addi $s1, $s1, -16 與 addi $s1, $s1, -4 得知unroll了四次 原本 loop 變成 Loop: lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -16 bne $s1, $zero, Loop 接著進行 重排指令 與 register renaming Loop: addi $s1, $s1, -16 lw $t0, 0($s1) lw $t1, 12($s1) lw $t2, 8($s1) lw $t3, 4($s1) addu $t0, $t0, $s2 addu $t1, $t1, $s2 addu $t2, $t2, $s2 addu $t3, $t3, $s2 sw $t0, 16($s1) sw $t1, 12($s1) sw $t2, 8($s1) sw $t3, 4($s1) bne $s1, $zero, Loop 最後 調整成可並行執行的順序且不發生 hazard 的 instruction group Loop: addi $s1, $s1, -16 lw $t0, 0($s1) lw $t1, 12($s1) (blank) lw $t2, 8($s1) addu $t0, $t0, $s2 lw $t3, 4($s1) addu $t1, $t1, $s2 addu $t2, $t2, $s2 sw $t0, 16($s1) addu $t3, $t3, $s2 sw $t1, 12($s1) sw $t2, 8($s1) (blank) sw $t3, 4($s1) bne $s1, $zero, Loop 每個 instruction group 可並行執行 變成... ALU or branch Data transfer =========================================================== Loop: addi $s1, $s1, -16 lw $t0, 0($s1) (blank) lw $t1, 12($s1) addu $t0, $t0, $s2 lw $t2, 8($s1) addu $t1, $t1, $s2 lw $t3, 4($s1) addu $t2, $t2, $s2 sw $t0, 16($s1) addu $t3, $t3, $s2 sw $t1, 12($s1) (blank) sw $t2, 8($s1) bne $s1, $zero, Loop sw $t3, 4($s1) ============================================================ 找 instruction group 時要注意 group 內 的 hazard 比如: lw $t0, 0($s1) addu $t0, $t0, $s2 不能成為一個 group group 間的 hazard 比如: 你不能分成 group-1: lw $t1, 12($s1) addu $t0, $t0, $s2 與 group-2: lw $t2, 8($s1) addu $t1, $t1, $s2 因為 group-1 中的 lw 與 group-2 中的 addu 有 load-used hazard -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.222.93
yesa315:太強大了... 10/07 17:12
yesa315:我想問一下 接著進行 lw $t0, 0($s1) 跟 sw $t0, 16($s1) 10/07 17:26
yesa315:讀出來的位子與寫進去的位子不同 是因為當時s1尚未-16嗎 10/07 17:27
yesa315:最後sw $t0, 16($s1) 之所以這樣 是因為s1已經加了16嗎?? 10/07 17:27
ZALYBAR:應該說addi $s1, $s1, -16 lw $t0, 0($s1) 這兩個指令 10/07 18:14
ZALYBAR:是同時執行 此時$s1還沒被扣16 所以lw 的位置不需要改變 10/07 18:17
ZALYBAR:而後面的sw 需要加16是因為$s1已經先被扣16 所以要加16 10/07 18:18
ZALYBAR:才會和原本的位置相同 10/07 18:18
yesa315:瞭解! 謝謝 10/07 22:09
luckyburgess:太厲害了!! 感謝你了 10/07 22:30