-
Notifications
You must be signed in to change notification settings - Fork 32
/
2、流水线性能.md
234 lines (107 loc) · 6.71 KB
/
2、流水线性能.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
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
### 流水线性能
#### 吞吐率
定义
<img src="https://img-blog.csdnimg.cn/20201225151601650.png" width="8%"/>
* 吞吐率通常使用缩写TP表示,是指在单位时间 (Tk) 内流水线所完成的任务数量 (n) 或输出结果的数量。
吞吐率分析:
* 各段时间均等
<img src="https://img-blog.csdnimg.cn/2020122515163574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="40%"/>
* (k 段线性)流水线完成n个连续任务所需要的总时间 个连续任务所需要的总时间 Tk = (k +n- 1) Δt
* 实际吞吐率
<img src="https://img-blog.csdnimg.cn/20201225151710264.png" width="22%"/>
* 最大吞吐率
<img src="https://img-blog.csdnimg.cn/2020122515174913.png" width="22%"/>
* 实际吞吐率
<img src="https://img-blog.csdnimg.cn/20201225151813453.png" width="18%" />
* 流水线的实际吞吐率小于最大吞吐率,它除了与每个段的时间有关外,还与流水线的段数k以及输入到流水线中的任务数n等有关。
* 只有当n>>k时,才有TP≈TP max 。
* 各段时间不全相等
<img src="https://img-blog.csdnimg.cn/20201225151845473.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="40%" />
* (k 段线性)流水线完成n个连续任务所需要的总时间为 个连续任务所需要的总时间为 Tk = ∑Δti + (n-1)max( Δti)
* 实际吞吐率
<img src="https://img-blog.csdnimg.cn/20201225151923639.png" width="35%" />
* 最大吞吐率
<img src="https://img-blog.csdnimg.cn/20201225151950160.png" width="25%" />
#### 加速比
各段时间均等
* 一条 一条k 段流水线完成n个连续任务所需要的时间 个连续任务所需要的时间
Tk = (k +n-1)Δt
* 顺序执行 顺序执行n个任务所需要的时间 个任务所需要的时间
Ts = nkΔt
* 实际加速比
<img src="https://img-blog.csdnimg.cn/20201225152018840.png" width="11%"/>
* 最大加速比
<img src="https://img-blog.csdnimg.cn/20201225152101460.png" width="20%" />
各段时间不全相等
* 实际加速比
<img src="https://img-blog.csdnimg.cn/20201225152128481.png" width="30%"/>
#### 效率
定义
<img src="https://img-blog.csdnimg.cn/20201225152155957.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="45%" />
* 流水线中的设备实际使用时间与整个运行时间的比值
* 由于流水线有通过时间和排空时间,所以在连续完成n个任务的时间内,各段并不是满负荷地工作
* E = n个任务实际占用的时空 / k个段总的时空区
各段时间均等
* 各段的效率 各段的效率ei相同
<img src="https://img-blog.csdnimg.cn/20201225152243498.png" width="30%"/>
* 整条流水线的效率
<img src="https://img-blog.csdnimg.cn/20201225152315316.png" width="35%"/>
* 最高效率
<img src="https://img-blog.csdnimg.cn/20201225152348712.png" width="20%" />
* 当 n>>k 时, E≈1
* 与其它指标的关系
* 当流水线各段时间相等时,流水线的效率与吞吐率成正比
E=TP·△t
* 流水线的效率是流水线的实际加速比S与它的最大加速比k的比值
E = S/K
各段时间不全相等
* 效率
<img src="https://img-blog.csdnimg.cn/20201225152414496.png" width="30%" />
#### 多功能流水
示例: 在下图所示的静态流水线上计算 <img src="https://img-blog.csdnimg.cn/20201225151122128.png" width="10%" />吞吐率、加速比和效率。
<img src="https://img-blog.csdnimg.cn/20201225151224375.png" width="40%" />
* (1) 选择适合于流水线工作的算法
* 先计算A1+B1 、A2+B2 、A3+B3 和 A4 +B4 ;
* 再计算(A1 +B1 )×(A2 +B2 ) 和 (A3 +B3 )×(A4 +B4 );
* 然后求总的乘积结果。
* (2)画出时空图
<img src="https://img-blog.csdnimg.cn/20201225151249271.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" />
* (3)根据时空图得结果
<img src="https://img-blog.csdnimg.cn/20201225151315689.png" width="50%" />
总结:影响(多功能)流水线性能的原因
* 多功能流水线在做某一种运算时,总有一些段是空闲的;
* 静态流水线在进行功能切换时,要等前一种运算全部流出流水线后才能进行后面的运算;
* 运算之间存在关联,后面有些运算要用到前面运算的结果;
* 流水线的工作过程有建立与排空部分。
#### 瓶颈问题
定义
* 流水线中执行时间最长的段称为流水线的瓶颈段
* 瓶颈段使得流水线性能下降
* 各段时间均等的流水线
<img src="https://img-blog.csdnimg.cn/20201225151342875.png" width="30%" />
* 各段时间不全相等的流水线
<img src="https://img-blog.csdnimg.cn/20201225151417210.png" width="25%" />
解决流水线瓶颈的方法
* 细分瓶颈段
<img src="https://img-blog.csdnimg.cn/20201225151442585.png" width="60%" />
* 重复设置瓶颈段
<img src="https://img-blog.csdnimg.cn/20201225151531189.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="60%" />
#### 流水设计
瓶颈问题
* 理想情况下,流水线在工作时,其中的任务是同步地每一个时钟周期往前流动一段。
* 当流水线各段不均匀时,机器的时钟周期取决于瓶颈段的延迟时间。
* 在设计流水线时,要尽可能使各段时间相等。
流水线的额外开销
* 流水寄存器需要建立时间和传输延迟
* 建立时间:在触发写操作的时钟信号到达之前,寄存器输入必须保持稳定的时间。
* 传输延迟:时钟信号到达后到寄存器输出可用的时间。
* 时钟偏移开销
* 流水线中,时钟到达各流水寄存器的最大差值时间。(时钟到达各流水寄存器的时间不是完全相同)
重要结论
* 流水线并不能减少(而且一般是增加)单条指令的执行时间,但却能提高吞吐率。
* 增加流水线的深度(段数)可以提高流水线的性能。
* 流水线的深度受限于流水线的额外开销。
* 当时钟周期小到与额外开销相同时,流水已没意义。因为这时在每一个时钟周期中已没有时间来做有用的工作。
冲突问题
* 前面产生了冲突的例子
* 流水线设计中要解决的重要问题之一