找回密码
 注册
关于网站域名变更的通知
查看: 465|回复: 1
打印 上一主题 下一主题

pipelining(流水线)的介绍

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-1-9 11:21 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

4 ?' T: K" N. e) n, {3 A引言
: ]& t+ K* H, C) F9 y7 X
" a, n1 e! a! N7 V- j4 zIt is quite a three-pipe problem.
$ I9 [' T4 w% G: F/ t6 n, x5 K2 x3 U-- Sir Arthur Conan Doyle
0 X7 \) H# j* P; ]0 Y; S0 i7 H
: E% \( E+ b5 Y1 D% J. M所以就分三部分说吧。/ V2 s- \* o) p- [) V4 F. f$ C

+ v* e; U& u  G* G$ w# E& e- s虽然,指令级并行(ILP)的潜能已经开发殆尽(intel已经在2004年宣布,停止高性能单处理器的研发),流水线技术也已经很成熟了,但是了解流水线,是学习和了解计算机体系结构绕不开的内容。本小节就从三个方面说一下流水线。% @+ [6 B( y8 G2 T& H- y
) D' I# _  f9 v
2 z& Y* ^6 e. B, n4 q8 k
5.1 什么是流水线7 t; u* Q9 F( I* A9 k$ U4 m6 M$ H! Y

+ y. r: p! ]' C$ w, Y8 E0 YPipelining is an implementation technique whereby multiple instructions are overlapped in execution; it takes advantage of parallelism that exists among the actions needed to execute an instruction.
  _& [  O( K; d# c; B( A: O7 o
0 ^& @3 o$ }- h$ A1 Z8 L流水线是利用执行指令所需的操作之间的并行性,实现多条指令并行执行的一种技术。  k. D( _9 `$ V1 y0 \( _6 _0 \

2 Z! `; [& l' r' E其实,流水线本身,跟计算机没关系。最早流水线是福特发明的,那时福特汽车公司生产效率很低,正是福特本人引进流水线,是生产效率大增。其原理就是把生产一辆完整的汽车分成若干工序,然后从第一个零件开始,依次流过整个流水线,然后一辆完整的汽车就被生产出来了。如果你在生产工厂呆过的话,理解流水线就很容易了。我想,工厂里的生产线,应该就是所谓的流水线。
4 E7 [) |" r/ ]1 A. j$ A% s* `: s4 n# N: j& P) T
特殊的,对于计算机体系结构来说,原理和汽车流水线一样,将一条指令的完成分成若干部分(流水节拍或流水段),然后指令依次流过这些流水段,就完成了这条指令。对于经典的5级流水线,如下:( I# g9 s3 U" M* l; K1 J
8 A6 j* @: Y; p. E- A
1,IF(指令取得)$ y  ]0 j7 S# C% H* I

- e# r9 [1 o5 v& C1 B3 [* |$ P3 X% N需要完成的工作:' j+ L9 A! [' o7 `4 i; g( H7 t

. s  t% G+ L' }* W: R8 Y! I( GSend the program counter (PC) to memory and fetch the current instruction from memory. Update the PC to the next sequential PC by adding 4 (since each instruction is 4 bytes) to the PC.- b) T9 S) f$ o

- D' n9 P* }, V. o根据PC(程序计数器)指示的地址,从存储器中取指令,并装入到IR(指令寄存器),同时PC+4。当然假设每条指令占4个字节。/ \2 h0 d- d9 p; {) S
* F9 U$ N9 {, p0 Y- \7 y
2,ID(指令译码)
6 E2 C( ?* T- s! C* I3 o% E1 b5 Y
需要完成的工作:
% q3 h3 x7 K8 y
4 V8 r2 B( T& Q% DDecode the instruction and read the registers corresponding to register source specifiers from the register file。
; U8 u& b) h) h+ G- M# j0 x  a8 R
1 n2 N: h+ L, v2 ?: M对指令进行译码,并且访问寄存器堆读出相应寄存器的内容。* i6 m& \( f6 s% ^9 \6 Y' A
3 p- {# ?  }% |7 X/ b) @$ D
3,EX(执行)* H& x5 a& r3 K* _# v' e
4 C/ o* w- O% H
需要完成的工作:9 K# b  Z- r; b

) C- q) J6 M) X- Z0 sThe ALU operates on the operands prepared in the prior cycle, peRForming one of three functions depending on the instruction type.+ B4 ~- {8 v) t

; I( l. F# Q  A) f) s: h$ j' sMemory reference8 q$ s- n, O* W5 P3 N

4 L8 Y9 A4 p: D$ ]# G+ `Register-Register ALU instruction
7 K0 R# K5 ]# }6 b( q; ]2 }' a7 i9 r4 w; S* k) g8 H
Register-Immediate ALU instruction* V# C9 z  t3 B, ^2 g1 z0 r

: t6 q/ s; S, M$ l5 U1 R9 g8 U0 tALU对上一个周期准备好的操作数进行运算,根据指令类型执行下面三种操作之一。
) G) d& C! @" P- m9 b
' l3 ^0 ^! B# T, ]访问存储器
8 v& D; b9 {' g
5 P1 X  ?* ^8 t6 s# t2 y# w寄存器-寄存器ALU指令
9 \+ V9 j) m- b- M5 N$ u6 M  N  W' N2 n- m# i: v
寄存器-立即数ALU指令- m, G, K9 a- s7 I
4 A! E, U7 n% @# x# I3 \
4,MEM(访问存储器)0 _& G4 y  V0 B

0 S" k( l( H* o. c: _; W( v需要完成的工作:
8 n  f3 S, i9 ?% u  e1 z$ {, H* \
2 O# N6 Y8 z( a6 |1 hIf the instruction is a load, memory does a read using the effective address computed in the previous cycle. If it is a store, then the memory writes the data from the second register read from the register file using the effective address.
# _( Z7 ^1 e8 g8 \% J6 w6 Q7 m) ^# L/ P4 W$ x% ]8 D' c
LOAD:从存储器中读取数据。STOR:把寄存器内容写到存储器。2 [) h" l% x2 [5 m

; h1 T2 O* i$ B5,WB(写回)+ D2 @7 X2 ]+ N' X
$ L2 Z. D4 S3 o  }
需要完成的工作:
* s5 ~. G  Z3 F) s  i  A4 J% [, l8 E3 o+ i  s
寄存器-寄存器ALU指令,LOAD指令会经过这个流水段。
( \% D5 h3 Y( |- e2 p, y7 h- ]" i" w6 V1 a- M& f
Write the result into the register file, whether it comes from the memory system (for a load) or from the ALU (for an ALU instruction).- Y0 r( J  C$ b4 _  |

! ?6 L3 ^9 X) `& i& J3 C! M, @将结果(来自LOAD指令或来自ALU)写入寄存器堆。
7 ~, |- D7 {  e, g5 H8 D9 M
2 B$ G: C$ n8 D" B , `0 `+ l8 Q; k; s3 {! B. P1 c( V
2 e7 d1 b% b2 t  d) M% A/ S
0 E) c0 }8 j! n  l' \4 e

8 |; i. B7 Y" j3 X* J; L- d
+ @! q3 _4 o+ a5.2流水线带来的影响! B& ]  [' n, |" Q: L9 |3 m

. ]4 a& g: ]1 S+ v$ x引进流水线,肯定是有好处的,会提高效率,这个先不说,天下没有完美的事,有好处就有坏处,就是会引进一些问题。哪些问题呢?如下:
: T+ W, T/ W: P$ C; W
6 ^% F% l/ C. f2 O& }1,Pipeline Hazards(流水线遇险)
+ i" u/ G0 M( }7 t0 @1 {2 c  f
/ ^. x8 E; ~( o1》Structural hazards(结构遇险)就是硬件资源不够用或者硬件资源使用冲突。
& j" C9 ?9 J  x9 t! E0 p' P; P! g- m. n3 ^9 K8 M
2》Data hazards(数据遇险)就是指令间有数据依赖关系造成的问题。
6 q. u+ ?$ h& J+ D# i, I; L4 r  d! \* [3 p* m/ `' A" W+ I% [
3》Control hazards(控制遇险)转移指令或修改PC造成的遇险。  F9 g, Y- h/ j) W% S) m7 i: P
" u3 V6 }( |7 O  G
2,Dealing with Exceptions(处理异常)% |5 J) O# J8 f" U
. W3 B4 N9 w+ ]% T$ ~$ d8 n3 X
1》I/O中断0 W8 |8 v. _& W4 B! {0 ^" Z1 r
- N' `. M& j2 o8 Q
2》系统调用
; D) [, P6 T: G! r; n+ N0 _& P
0 f( G) ^# i' g' F2 ~) e3》执行跟踪指令$ G& Z. T* b, J" b) P
5 T) l4 k2 @, i1 K* \& k) f
4》断点
5 W. T9 a$ v3 b; |- A- f" r! @8 V( F
5》定点运算溢出; p4 G, R% @1 Y! e2 z9 a

; L3 t! G" {  h% g; v6 ~/ e9 O6》浮点运算异常: W  |5 S2 Q/ x" U, ^9 Y
1 {  q9 u* t  Z% V7 f; B
7》页面异常
4 K& Y6 y' E! T1 O7 ^& e
1 F! Z$ ^# V/ h8》访问存储器时使用错误地址
( V) m1 m( {6 a) A1 w! E1 t
) S3 k* E* D% B5 B& ~9》存储保护违例
! F2 K  ~+ ~6 e+ J  n9 J& t( @3 c* g0 {& j2 r0 J
10》硬件故障
- {* N* }  k  D9 N( D/ l
* |) k0 M. n3 ^' V11》断电
2 i# A: L9 ?5 G3 e0 p& Z4 M5 p3 X- Z$ r4 t, w, ]0 e
3,Instruction Set Complications(指令集本身的复杂性), A) P2 |# C. Z7 @7 p2 @. D) L1 L

/ j! _$ H+ {# S3 q9 m有些体系结构的指令集用流水线实现起来就比较复杂。
7 a! ], }' C( A  K3 G7 m# i2 m* j6 ~' t
9 X! j3 |# W6 k: J
这些问题,可以仔细看一下上面的两张图,好好想一下就能推断会出现这些问题,这一点很重要。
/ |8 x' |& I1 p7 s" @2 A0 t+ T; B! E/ r/ m  }
7 A* T( }1 S* c8 V! x8 A( d* Y4 G
5.3 解决技术, j2 I; h4 |  [7 R+ I" D' l, P
- q2 h, Z7 C8 u4 m
先说一个式子:. p0 ~3 q) [& M" ^

1 T# y4 @3 r9 h+ A7 ^5 ^1 z2 P% mPipeline CPI = Ideal pipeline CPI + Structural stalls + Data hazard stalls + Control stalls, m/ w( l5 J) |" [8 B* ]( w

# H. n9 N( X2 K* _+ P  Y这些技术无外乎就是想方设法减小右边的4项内容其中的一项或几项。; k5 J; c9 d5 ?7 M. l4 @; b3 v  l# ^& ^, Y/ P

6 W6 G; h7 l+ N( J0 C) A& T4 O 7 e+ U" X" n$ W8 {$ F/ h2 F: j

! d, ~2 u4 n% }# i& P+ C6 e$ _, B5 u' F7 J0 Y
5.4小结
9 g+ q; d" G8 v! D7 o1 X0 D5 k6 V' |0 c. U  o8 S* r; E. n" M
流水线,在各行各业都有体现,想像一下,大学食堂,如果把卖豆浆,油条,咸菜,粥,米饭,馒头,。。。这些窗口都合成一个窗口,会是什么景象。. _) z( q% ]( r+ t  S, V
9 ?+ ~& {9 |( F6 B8 n5 ?7 w! J
这就是流水线的魅力。1 ]) s7 n6 J8 {& i" m) ?" w; x1 m
& {& i+ @7 n2 r, n+ z" Z
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-1-9 19:02 | 只看该作者
    pipelining(流水线)学习
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-25 16:36 , Processed in 0.203125 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表