计算机原理与嵌入式系统笔记:第五篇
必考的
流水线
- 流水线无法减少每个任务的延迟。
- 流水线中多个任务同时执行,可以提高整个工作的吞吐率。
- 流水线的速率受限于速度最慢的一级。
木桶效应,小子
加速比
流水线的加速比:采用流水线方式执行之后,吞吐量提高的比例。
流水线的最大加速比:最大加速比=流水线级数(最好情况下)
- 流水线各级延时不均衡会降低加速比。
- 进/出流水线的延时降低了加速比。任务数足够多时,可以忽略进/出流水线延时对加速比的影响。
ARM7的三级流水线
ARM使用三级流水线:
-
取指:从存储器中获取指令代码到指令流水线。
-
译码:指令译码,通过控制信号操作数据通路准备执行。
-
执行:指令获得数据通路“使用权”:读寄存器, 移位操作, ALU运算和写回。
每一级的结果存储在寄存器中。
练习1
[{"url":"https://webp.esing.dev/img/image-20241016124012384_20241016_1240.png","alt":""},{"url":"https://webp.esing.dev/img/image-20240612162220732_2024-6-12_1622_l2umcog3mw.png","alt":""},{"url":"https://webp.esing.dev/img/image-20240612162243079_2024-6-12_1622_dfz27ald65.png","alt":""}]
答案
- D
- B
- C
流水线停顿
流水线停顿有两种:
- 数据停顿(Data stall)
- 控制停顿(Control stall)
数据停顿
- 如果流水线的某一级无法在一个时钟周期内完成,将会导致流水线停顿。
- 例如:多寄存加载指令(LDMIA)在指令执行过程中引入数据停顿(Data stall)。
控制停顿
- 分支指令在流水线中产生控制停顿(Control stall),带来的延时通常被称为分支损失(Branch penalty)。
- 例如:分支指令BNE是否执行,要在第三个时钟周期才能确定,因此浪费了两个时钟周期。
不同循环的性能差别
Do-Until
1 | ; loop initiation code |
While-Do
1 | ; loop initiation code |
对于Do-Until来说,继续循环是最坏情况,退出循环是最好情况,但While-Do正好相反:继续循环是最好情况,退出循环是最坏情况。
这是因为Do-Until的test放在最后执行,而While-Do的test放在上一个周期的下一次(即新周期的第一次)执行。
下一篇会讲高速缓存,最烦的一部分
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Esing的小站!
评论
WalineGitalk