[理工] [計組] control hazard

看板Grad-ProbAsk作者 (numin)時間14年前 (2012/09/20 22:00), 編輯推噓3(3015)
留言18則, 4人參與, 最新討論串1/1
Given the following MIPS instruction code segment, please answer each question below. L1: addi $t0 ,$t0,4 lw2 $s1 ,0($t0) sw $s1 ,32($t0) lw1 $t1 ,64($t0) slt $s0 ,$t1,$zero bne $s0 ,$zero,L1 Assume a forwarding unit is available to only forward data from ME and/or WB to EX. Please reorder/rewrite the code to maximize its performance.Note that you should consider maximizing the performance based on the assumption that the loop might be iterated a few times.You may insert no-ops in the code segment to resolve inevitable hazards if any. 解答: L1: addi $t0,$t0,4 lw1 $t1,64($t0) lw2 $s1,0($t0) slt $s0,$t1,$zero nop nop bne $s0,$zero,L1 sw $s1,32($t0) 疑問:想請問大家在解類似這種reorder code時,尤其有control hazard時, 是都如何思考,下手去做的。雖然課本上有三種from before,from target, from fall through方法,可是碰到這種題目真的不是很清楚該如何去作答。 不曉得有沒有能說明一下您在碰到這種題目的做法,讓我參考看看... 我只會先解control hazard,然後在用課本三種方法隨便亂試...或是交換指令 然後找到data hazard,就畫成pipeline stage了...看要不要插入nop 問題:請問為什麼不是插一個nop,而是兩個。我只會畫圖,以下是我畫的圖 ,不曉得又是哪裡出錯了...(看完上篇d大解說,現在懂了。可是都打了就... 請問大家都是怎麼做這類題型吧。) addi IF ID EX ME-| WB lw2 IF ID EX | ME-| WB lw1 IF ID |- EX | ME WB slt IF ID |-EX ME WB-| nop X X X X | X nop X X X | X X bne IF ID-| EX ME WB sw IF ID EX ME WB (addi和lw用有hazard:forwarding解,slt和bne有hazard) ※ 編輯: numin 來自: 123.193.221.223 (09/20 22:19)

09/20 23:02, , 1F
先做from before 不行在試其他兩個
09/20 23:02, 1F

09/20 23:03, , 2F
跳的機率很高用from target 低就用另一個
09/20 23:03, 2F

09/20 23:18, , 3F
想請問一下,如果題目沒有特別說明跳的機率的話,若做from
09/20 23:18, 3F

09/20 23:19, , 4F
before失敗,接下來就是用交換指令嗎?還是也可以用另外兩個
09/20 23:19, 4F

09/20 23:19, , 5F
去測試看行不行?
09/20 23:19, 5F

09/20 23:57, , 6F
先想code到底在做啥,以這題,是將a[i]值拿到a[i+8]
09/20 23:57, 6F

09/20 23:57, , 7F
再拿出a[i+16],若負則i++重複loop
09/20 23:57, 7F

09/20 23:58, , 8F
找出hazard, MIPS只與下個指令或下下個指令有相依
09/20 23:58, 8F

09/20 23:58, , 9F
(addi,lw2),(addi,sw),(lw2,sw),(lw1,slt),(addi,bne)
09/20 23:58, 9F

09/20 23:59, , 10F
去掉可解決(lw2,sw):2 ,(lw1,slt):1 ,(slt,bne):2
09/20 23:59, 10F

09/20 23:59, , 11F
addi是為了拿到正確i故先做,2個lw分別是拿出a[i],a[i+16]
09/20 23:59, 11F

09/21 00:00, , 12F
因bne在EX才決定是否跳,故下面放個總是要做的指令,選sw
09/21 00:00, 12F

09/21 00:00, , 13F
這樣就不管跳不跳都不需flush下一指令
09/21 00:00, 13F

09/21 00:00, , 14F
最後再靠一點點的靈感就排出來了XD
09/21 00:00, 14F

09/21 00:32, , 15F
...好強的靈感
09/21 00:32, 15F

09/21 00:39, , 16F
我翻了課本,許多MIPS機器是將分支執行移到ID,我前面弄錯了,
09/21 00:39, 16F

09/21 00:40, , 17F
一般沒說應該是在ID才是,所以bne下面才是塞1指令而不是2指令
09/21 00:40, 17F

09/23 20:45, , 18F
感謝d大的做法,這靈感真的也太強了XDD。
09/23 20:45, 18F
文章代碼(AID): #1GMo6Apl (Grad-ProbAsk)