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