[理工] 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