Skip to content

Commit 727ebe7

Browse files
committed
docs: 更新第三章笔记
1 parent a3c9984 commit 727ebe7

File tree

6 files changed

+45
-18
lines changed

6 files changed

+45
-18
lines changed

computer-architecture/notes/Chap3-ILP.typ

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

137156
miss?
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)
51.1 KB
Loading
406 KB
Loading
112 KB
Loading
84.8 KB
Loading
233 KB
Loading

0 commit comments

Comments
 (0)