-
Notifications
You must be signed in to change notification settings - Fork 32
/
7、指令流水.md
216 lines (114 loc) · 6.71 KB
/
7、指令流水.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# 指令流水
如何提高计算机性能
* 提高访存速度
* 高速芯片
* Cache
* 多体并行
* 提高 I/O 和主机之间的传送速度
* 中断
* DMA
* 通道
* I/O 处理机
* DMA
* 多总线
* 提高运算器速度
* 高速芯片
* 改进算法
* 快速进位链
* 提高整机处理能力
* 高速器件
* 改进系统结构
* 开发系统的并行性
**系统的并行性**
* 并行的概念
* 并发:两个或两个以上事件在 同一时间段 发生
* 同时:两个或两个以上事件在 同一时刻 发生
* 并行性的等级
* 过程级(程序、进程):粗粒度 软件实现
* 指令级(指令之间、指令内部):细粒度 硬件实现
**指令流水原理**
* 指令的串行执行
<img src="https://img-blog.csdnimg.cn/20201219144124627.png" width="50%" height="50%" />
* 取指令:取指令部件 完成
执行指令:执行指令部件 完成
* 总有一个部件空闲
* 指令的二级流水
<img src="https://img-blog.csdnimg.cn/20201219144145696.png" width="40%" height="50%" />
* 若取指 和 执行阶段时间上 完全重叠
* 指令周期减半 速度提高 1 倍
* 影响指令流水效率加倍的因素
* 执行时间 > 取指时间
<img src="https://img-blog.csdnimg.cn/20201219144211908.png" width="40%" height="50%" />
* 条件转移指令 对指令流水的影响
* 必须等 上条 指令执行结束,才能确定 下条 指令的地址,造成时间损失
* 解决办法 : 猜测法
* 指令的六级流水
<img src="https://img-blog.csdnimg.cn/2020121914423718.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_7" width="50%" height="50%" />
**影响指令流水线性能的因素**
* 结构相关
<img src="https://img-blog.csdnimg.cn/20201219144300135.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" height="50%" />
* 不同指令争用同一功能部件产生资源冲突
* 解决办法
* 停顿
* 指令存储器和数据存储器分开
* 指令预取技术 (适用于访存周期短的情况)
* 数据相关
* 不同指令因重叠操作,可能改变操作数的 读/ 写 访问顺序
* 写后读相关(RAW )
<img src="https://img-blog.csdnimg.cn/20201219144323736.png" width="40%" height="50%" />
* 读后写相关(WAR )
<img src="https://img-blog.csdnimg.cn/20201219144349431.png" width="40%" height="50%" />
* 写后写相关(WAW )
<img src="https://img-blog.csdnimg.cn/20201219144409219.png" width="40%" height="50%" />
* 解决办法
* 后推法
* 采用 旁路技术
* 控制相关
* 由转移指令引起
<img src="https://img-blog.csdnimg.cn/20201219144429583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_7" width="40%" height="50%" />
* 损失
<img src="https://img-blog.csdnimg.cn/20201219144452843.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" height="50%" />
**流水线性能**
* 吞吐率
* 单位时间内 流水线所完成指令 或 输出结果的数量
* 计算
<img src="https://img-blog.csdnimg.cn/20201219144513351.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="35%" height="50%" />
* 加速比 $S_p$
* m 段的流水线的速度,与等功能的非流水线的速度
* 计算
<img src="https://img-blog.csdnimg.cn/2020121914453974.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="35%" height="50%" />
* 效率
* 流水线中各功能段的 利用率
* 由于流水线有 建立时间 和 排空时间,因此各功能段的 设备不可能一直处于工作状态
* 计算
<img src="https://img-blog.csdnimg.cn/20201219144601977.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="40%" height="50%" />
**流水线的多发技术**
* 超标量技术
<img src="https://img-blog.csdnimg.cn/2020121914462711.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" height="50%" />
* 每个时钟周期内可并发多条独立指令
* 配置多个功能部件
* 不能调整 指令的 执行顺序
* 通过编译优化技术,把可并行执行的指令搭配起来
* 超流水线技术
<img src="https://img-blog.csdnimg.cn/20201219144652812.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" height="50%" />
* 在 一个时钟周期内再分段 (3段)
* 在一个时钟周期内 一个功能部件使用多次( 3次)
* 不能调整 指令的 执行顺序
* 靠编译程序解决优化问题
* 超长指令字技术
<img src="https://img-blog.csdnimg.cn/20201219144714793.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" height="50%" />
* 由编译程序挖掘出指令间 潜在的并行性
* 将多条能并行操作的指令组合成
* 具有 多个操作码字段 的 超长指令字 (可达几百位)
* 采用多个处理部件
**流水线结构**
* 指令流水线结构
* 完成一条指令分 6 段,每段需一个时钟周期
<img src="https://img-blog.csdnimg.cn/20201219144736359.png" width="40%" height="50%" />
* 若流水线不出现断流 1 个时钟周期出 1 结果
* 不采用流水技术 6 个时钟周期出 1 结果
* 理想情况下,6 级流水 的速度是不采用流水技术的6 倍
* 运算流水线
* 完成 浮点加减运算可分:对阶、尾数求和、规格化
<img src="https://img-blog.csdnimg.cn/20201219144802448.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="40%" height="50%" />
* 分段原则每段操作时间尽量一致