[理工] mutiple issue

作者: kaidi620 (萬能屎哥)   2019-02-14 21:47:10
想請問一下這一題
https://i.imgur.com/zkmFDw7.jpg
答案是
https://i.imgur.com/8IQuhsj.jpg
它們好像把指令重新排序了
但我的疑問是 為何
addi s1, s1 , -4
可以拉上去 它應該要等第三個指令sw把t0存進s1吧?
求解QQ
作者: chieya (chieya)   2019-02-14 22:01:00
s1存的是mem位址 sw存的是mem位址的data @@
作者: GeniusPuddin (GeniusPudding)   2019-02-14 22:28:00
同樓上 這個感覺很容易不小心看錯XD
作者: Davidhu127 (船船_BTTO)   2019-02-14 22:33:00
只要記得,有write的指令只有Rtype, addi和lw
作者: kaidi620 (萬能屎哥)   2019-02-14 22:46:00
那想請問大神 就是 如果是這樣 那應該addi也沒有和lw有相依 那為什麼addi不能往上拉跟lw 同時為cycle 1 呢
作者: sooge (老衲)   2019-02-14 22:49:00
addi不是把常數和暫存器的內容相加嗎 為什麼變成算memory位置了@@
作者: pig4306 (豬~培根)   2019-02-14 22:50:00
你是不是沒上課阿 凡神明明有說addi可以放cycle1 也可以放cycle2 這題只是因為指令數不夠 每個packet才會出現一堆空格 你要是把addi搬上去也沒差 只是cycle2明顯是空包彈而已
作者: olen0622 (hong)   2019-02-14 22:55:00
說不定人家沒上課
作者: agag5123 (ag)   2019-02-15 03:45:00
addi和lw sw在s1還是有相依性的,不過屬於WAR反相關移上去之後要調整原本的組語,把存取Men.的位置+4因為不是真實的data,只是存取位置,稍微改動抵消即可
作者: eric131204 (暗女巫)   2019-02-15 07:29:00
第一個cycle的兩個指令有先後嗎,為什麼要+4?(如果把addi移上去的話)
作者: pig4306 (豬~培根)   2019-02-15 10:34:00
eric理解上有點錯誤 加四的只有第一個cycle以外的所有s1相關的pc-relative addressing instructions 正常情況下issue排滿addi會在cycle1 所以cycle1的lw會跟addi平行運作這時候lw的s1是不需要+4的
作者: eric131204 (暗女巫)   2019-02-15 10:50:00
那agag大說的+4是什麼意思,我也是覺得cycle1讀取的s1不互相干擾不是嗎,還是我解讀錯誤?
作者: agag5123 (ag)   2019-02-15 12:46:00
lw不會,在addi後才執行的都要加,應該表示存在forward不過我很好奇duel issue的add和lw包一起,它不會發現有相依而在MEstage把alu算出的數據傳給DM用嗎
作者: b10007034 (Warren)   2019-02-15 14:45:00
樓上,它們已經平行執行了,lw在addi後面才有可能
作者: agag5123 (ag)   2019-02-15 14:51:00
可是DM元件不是在ALU後面嗎?ex/mem.reg.後拉條線給DM
作者: b10007034 (Warren)   2019-02-15 14:52:00
好像理解錯你的問題了,不過你可以觀察一下DM前面有沒有MUX另外,可以平行處理的指令,相依問題在更早就處理好了這邊compiler已經檢查好才包成一個packet,否則不會包
作者: agag5123 (ag)   2019-02-15 15:07:00
發現是b大欸XD你分享的allocate和FGMT都幫助我很大
作者: skyHuan (Huan)   2019-02-15 19:04:00
推b大 >///<

Links booklink

Contact Us: admin [ a t ] ucptt.com