@@ -96,46 +96,67 @@ slug: /course/ca/note/3
9696
9797# slide2x ([14], image (" ../public/merged-3-0/0014.jpg" ), image (" ../public/translated-3-0/0014.jpg" ), ct : 0.01 , cb : 0.12 )
9898
99- - *读后写依赖(read-after-write dependency, RAW dependency)* :
100- - 又称 *真数据依赖(true data dependency)* 。
101- - 一般来说,只能通过 forwarding 或 stall 来解决。
99+ - *读后写依赖(read-after-write dependency, RAW dependency)* ,又称 *真数据依赖(true data dependency)* 。
100+ - 一般来说,只能通过 forwarding 或 stall 来解决。
101+
102+ # example (title : [通过 stall 解决 RAW 冒险])[
103+ # no-par-margin
104+ # align (center , image (" images/2025-04-30-21-01-05.png" , width : 80% ))
105+ ]
102106
103107=== WAW Dependences
104108
105109# slide2x ([15], image (" ../public/merged-3-0/0015.jpg" ), image (" ../public/translated-3-0/0015.jpg" ), ct : 0.01 , cb : 0.06 )
106110
107- - *写后写依赖(write-after-write dependency, WAW dependency)* :
108- - 又称 *输出依赖(output dependency)* ,是 *命名依赖(name dependency)* 的一种。
109- - WAW 和 WAR 这两种命名依赖都可以通过重命名寄存器的方式解决。
111+ - *写后写依赖(write-after-write dependency, WAW dependency)* ,又称 *输出依赖(output dependency)* ,是 *命名依赖(name dependency)* 的一种。
112+ - WAW 和 WAR 这两种命名依赖都可以通过重命名寄存器的方式解决。
110113
111- === WAR Dependences
114+ # example (title : [通过 stall 解决 WAW 冒险])[
115+ # no-par-margin
116+ # align (center , image (" images/2025-04-30-21-02-20.png" , width : 70% ))
117+ ]
112118
113- # slide2x ([16 ], image (" ../public/merged-3-0/0016 .jpg" ), image (" ../public/translated-3-0/0016 .jpg" ), ct : 0.01 )
119+ # slide2x ([19 ], image (" ../public/merged-3-0/0019 .jpg" ), image (" ../public/translated-3-0/0019 .jpg" ), ct : 0.01 , cb : 0.13 )
114120
115- - *写后读依赖(write-after-read dependency, WAR dependency)* :
116- - 又称 *反依赖(anti-dependency)* ,是 *命名依赖(name dependency)* 的一种。
117- - 在大部分顺序发射、顺序执行的流水线中,因为是顺序读取(一般都是尽可能早的读取出值),不会出现 WAR 冒险。
121+ - 解决方法一:取消掉前一条指令的 WB 阶段,可以在 ID 阶段进行检测。
122+ - 解决方法二:检测到冲突时阻滞在 ID 阶段(即后文小结的方法)。
118123
119- # slide2x ([17], image ( " ../public/merged-3-0/0017.jpg " ), image ( " ../public/translated-3-0/0017.jpg " ), ct : 0.02 , cb : 0.17 )
124+ === WAR Dependences
120125
121- # slide2x ([18 ], image (" ../public/merged-3-0/0018 .jpg" ), image (" ../public/translated-3-0/0018 .jpg" ), ct : 0.03 )
126+ # slide2x ([16 ], image (" ../public/merged-3-0/0016 .jpg" ), image (" ../public/translated-3-0/0016 .jpg" ), ct : 0.01 , cb : 0.5 )
122127
123- # slide2x ([19], image ( " ../public/merged-3-0/0019.jpg " ), image ( " ../public/translated-3-0/0019.jpg " ), ct : 0.01 , cb : 0.10 )
128+ - *写后读依赖(write-after-read dependency, WAR dependency)* 又称 *反依赖(anti-dependency)* ,是 *命名依赖(name dependency)* 的一种。
124129
125- # slide2x ([20], image (" ../public/merged-3-0/0020.jpg" ), image (" ../public/translated-3-0/0020.jpg" ), ct : 0.01 , cb : 0.49 )
130+ # no-par-margin
131+ # align (center , image (" images/2025-04-30-20-59-47.png" , width : 42% ))
132+ # no-par-margin
133+
134+ - 在大部分顺序发射、顺序执行的流水线(称为 *顺序流水线(sequential pipeline)* )中,因为是顺序读取(一般都是尽可能早的读取出值),不会出现 WAR 冒险。
126135
127136# slide2x ([21], image (" ../public/merged-3-0/0021.jpg" ), image (" ../public/translated-3-0/0021.jpg" ), ct : 0.01 )
128137
129- # slide2x ([22], image (" ../public/merged-3-0/0022.jpg" ), image (" ../public/translated-3-0/0022.jpg" ), ct : 0.01 , cb : 0.09 )
138+ # tip (title : [小结:顺序流水线解决结构冒险与数据冒险的方法])[
139+ 一种简单且常用的方法是,对于结构冒险、RAW 冒险和 WAR 冒险,全都在 ID 阶段进行判断,如果不行就在 ID 阶段暂停,等到依赖解除后再进行发射。
130140
131- # slide2x ([23], image (" ../public/merged-3-0/0023.jpg" ), image (" ../public/translated-3-0/0023.jpg" ), ct : 0.01 , cb : 0.09 )
141+ # no-par-margin
142+ # align (center , image (" images/2025-04-30-20-50-00.png" , width : 40% ))
143+ ]
144+
145+ # slide2x ([20], image (" ../public/merged-3-0/0020.jpg" ), image (" ../public/translated-3-0/0020.jpg" ), ct : 0.01 , cb : 0.49 )
132146
133- # slide2x ([24], image (" ../public/merged-3-0/0024.jpg" ), image (" ../public/translated-3-0/0024.jpg" ), ct : 0.01 , cb : 0.11 )
147+ # summary (title : [MIPS R4000 流水线])[
148+ - `| IF | IS | RF | EX | DF | DS | TC | WB |`
149+
150+ # no-par-margin
151+ # align (center , image (" images/2025-04-30-20-56-06.png" , width : 60% ))
152+ ]
134153
135154# slide2x ([25], image (" ../public/merged-3-0/0025.jpg" ), image (" ../public/translated-3-0/0025.jpg" ), ct : 0.01 , cb : 0.26 )
136155
137156miss?
138157
158+ 这里讲的冒险问题其实没听懂
159+
139160# slide2x ([26], image (" ../public/merged-3-0/0026.jpg" ), image (" ../public/translated-3-0/0026.jpg" ), ct : 0.01 , cb : 0.03 )
140161
141162# slide2x ([27], image (" ../public/merged-3-0/0027.jpg" ), image (" ../public/translated-3-0/0027.jpg" ), ct : 0.01 , cb : 0.20 )
@@ -144,8 +165,14 @@ miss?
144165
145166# slide2x ([29], image (" ../public/merged-3-0/0029.jpg" ), image (" ../public/translated-3-0/0029.jpg" ), ct : 0.01 , cb : 0.04 )
146167
168+ == Controls Hazards | 控制冒险
169+
147170# slide2x ([30], image (" ../public/merged-3-0/0030.jpg" ), image (" ../public/translated-3-0/0030.jpg" ), ct : 0.01 , cb : 0.01 )
148171
172+ - 最常用的方法就是 stall(*延迟分支(delayed branch)* )。
173+
174+ == Hazards among FP Instructions
175+
149176# slide2x ([31], image (" ../public/merged-3-0/0031.jpg" ), image (" ../public/translated-3-0/0031.jpg" ), ct : 0.01 , cb : 0.07 )
150177
151178# slide2x ([32], image (" ../public/merged-3-0/0032.jpg" ), image (" ../public/translated-3-0/0032.jpg" ), ct : 0.01 , cb : 0.10 )
0 commit comments