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

pipelining(流水线)的介绍

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
( N, L/ ^) p- A; n
引言1 a2 @2 T5 w! Q& z( D+ |' \

6 q6 g+ \3 B) z' w7 |* DIt is quite a three-pipe problem.9 S! M- L- @6 J. q1 Z
-- Sir Arthur Conan Doyle. Q& F  \+ t% I) i, V* S
4 |) U# G" k1 a% u- a* U, N! ^8 Z- K
所以就分三部分说吧。
! }2 `6 T: N+ ~
# ?" |0 M# [1 W9 _虽然,指令级并行(ILP)的潜能已经开发殆尽(intel已经在2004年宣布,停止高性能单处理器的研发),流水线技术也已经很成熟了,但是了解流水线,是学习和了解计算机体系结构绕不开的内容。本小节就从三个方面说一下流水线。
7 X8 }2 p% P$ l7 C5 Q: T* x- ?: c
! R7 U  M  ~8 K% T4 V. l% [& X& n- x5 m7 B$ P! V( V! u8 q
5.1 什么是流水线( ~& G/ N$ N& Q$ h$ G
6 D! \# r0 x, j: D5 [6 A; m
Pipelining 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.
, ~/ B  O- I/ q
2 Y: \  N2 f( h. M) _* O流水线是利用执行指令所需的操作之间的并行性,实现多条指令并行执行的一种技术。! Z3 ]/ c/ V6 @* l+ `/ E* L9 v

2 u; W5 Y( e( ~# [5 x( c其实,流水线本身,跟计算机没关系。最早流水线是福特发明的,那时福特汽车公司生产效率很低,正是福特本人引进流水线,是生产效率大增。其原理就是把生产一辆完整的汽车分成若干工序,然后从第一个零件开始,依次流过整个流水线,然后一辆完整的汽车就被生产出来了。如果你在生产工厂呆过的话,理解流水线就很容易了。我想,工厂里的生产线,应该就是所谓的流水线。
# V& \% U) i' p$ Q8 H* W' Q, J
特殊的,对于计算机体系结构来说,原理和汽车流水线一样,将一条指令的完成分成若干部分(流水节拍或流水段),然后指令依次流过这些流水段,就完成了这条指令。对于经典的5级流水线,如下:  V- ?! Y: O2 I/ Q/ C, Z9 U7 d

( [- A$ S8 X" {+ z1,IF(指令取得)8 ~; N* e. o% U" D5 ^
" j4 y) T/ ]& S# u5 X! U" }; G
需要完成的工作:' r1 u1 f$ X, t4 W
% C# B7 L! N7 p9 C9 s3 @5 X; z0 C' Y
Send 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.
% {6 g: o* ~5 k0 K8 c0 r* a0 v% E' L* k7 b+ r
根据PC(程序计数器)指示的地址,从存储器中取指令,并装入到IR(指令寄存器),同时PC+4。当然假设每条指令占4个字节。, r& x. k7 I# z1 q

9 |( a8 U/ i$ e# v. I2,ID(指令译码)
' j/ q  ~7 a* o/ E- s- u- `( @" U% b' n! t3 X5 C
需要完成的工作:+ h) x; i" p/ G  R4 o' G4 ~! f

% J$ C* a; }* h: UDecode the instruction and read the registers corresponding to register source specifiers from the register file。
- n6 [/ s0 m8 v0 J: B7 f# ^
, z( J3 |9 G1 {) T( p对指令进行译码,并且访问寄存器堆读出相应寄存器的内容。
, ^  [1 G" [# n2 m! k, g0 e5 v( V% z9 i2 `6 v9 d, c
3,EX(执行)+ l/ X% ^' N" a2 ?, k2 b
3 C* _) Q4 \8 D) Z
需要完成的工作:
' z4 h8 N& E* v+ A; k. k! j# s9 l* Z0 v) Z& v4 ?( c% H' o# _' A$ j% c0 @$ ?7 r
The ALU operates on the operands prepared in the prior cycle, peRForming one of three functions depending on the instruction type.
: \9 G/ U' w. |: [3 Z
* y  h5 m' j0 S5 Q1 iMemory reference% I& Y5 z7 J6 i- L, x

  f2 J8 o( n; \7 M4 CRegister-Register ALU instruction( |1 @) e% a; S/ H

: X/ r$ t# \9 }; F. fRegister-Immediate ALU instruction
6 U, m' Q9 Y7 S  g
( n# j3 E' y$ ~# }. p9 K, \& a" KALU对上一个周期准备好的操作数进行运算,根据指令类型执行下面三种操作之一。( a! o7 k% N) Y  M. R6 u

' g6 j6 [; _& B- {- m) `访问存储器1 H( [, W+ g/ X! d( d8 Z- b

0 `  ]. F, ^& e# h4 E/ Y6 B, m寄存器-寄存器ALU指令4 o  R: v* V! l1 g  m

' j0 L& l4 v5 N2 O1 y' g9 ]: P寄存器-立即数ALU指令& c2 |0 }2 `' d- G1 F
8 J( c2 U/ E6 n) G3 p/ `
4,MEM(访问存储器)2 k( U* s! i* P1 p  c

. u7 i$ G# R2 `8 g8 c; t需要完成的工作:& S: \0 ]& A+ T

; \+ h* x/ `5 K. cIf 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.9 L) G) W, Z0 n- x
% n" w# e( r( I6 E. k3 I% C
LOAD:从存储器中读取数据。STOR:把寄存器内容写到存储器。# @( l; F9 a2 S* h
/ |/ ~3 t; I. A8 r* z0 P0 W
5,WB(写回)* a! |  u& U. g
2 P$ s7 {  r9 T& ~. D- j
需要完成的工作:- W8 K9 C6 s1 `: {" d
: }1 c. H6 x. b
寄存器-寄存器ALU指令,LOAD指令会经过这个流水段。% j. ?* f1 F6 w

/ h* k) w# H( p( G  G1 x1 m: nWrite the result into the register file, whether it comes from the memory system (for a load) or from the ALU (for an ALU instruction).! b) j( T8 }# `3 F. c

7 E# h6 T5 l- x6 b8 y! t将结果(来自LOAD指令或来自ALU)写入寄存器堆。
! L. K+ s5 ]" R' l7 C7 B! M3 J, S0 n# p" _7 ?2 K( _" q
3 I% s& T2 Q" ]7 H

% W; Y8 L3 l) v) i. W4 ^2 x& }
! F9 z1 D3 o' R1 b6 I( t" i( F5 {) H

( J9 A: {& s+ o$ g+ P# _" S, k) o5.2流水线带来的影响
" h6 g: o9 N5 ]) J8 |5 a' }& i8 f; t' E7 f1 {7 A7 ?
引进流水线,肯定是有好处的,会提高效率,这个先不说,天下没有完美的事,有好处就有坏处,就是会引进一些问题。哪些问题呢?如下:
7 U6 r. \! v& G( w: q9 T- R$ I1 }
$ F; E- k, s8 [1,Pipeline Hazards(流水线遇险)
2 a$ {1 r( w+ O: K3 U! S, k6 E0 z; l3 d
1》Structural hazards(结构遇险)就是硬件资源不够用或者硬件资源使用冲突。& O) m% x# }* u; @1 }

" x; S" P9 X3 [4 V( [3 q" |/ `2》Data hazards(数据遇险)就是指令间有数据依赖关系造成的问题。( A$ L! @6 ?( y% j# z7 K# p
- F8 \3 ?( w. r) @& o
3》Control hazards(控制遇险)转移指令或修改PC造成的遇险。, L& b; G" ^: J) W! w5 ~

0 J0 Q% y6 X3 R7 `2,Dealing with Exceptions(处理异常), F  o- W% E! ]" G1 k6 q; t

9 O2 J* t1 Z4 ]1》I/O中断
( ^1 c  i6 L; U* W; b* t1 f) X. f% U9 U9 p1 R$ W2 X
2》系统调用$ B* t0 I1 @; K, R, s

; X5 T1 K/ z' h4 l0 q3》执行跟踪指令% Q4 M5 M8 J+ u

1 o3 g6 H9 p4 l, }  G1 r4》断点
7 U# |4 {4 [+ }) f2 F9 E6 g1 \$ [. _$ x+ y
5》定点运算溢出
# S' [* D* J& W2 `7 y
. W% w: Q; f' x; r3 a% j6》浮点运算异常
9 o' K1 N) ~) C* A1 T) @
* P) X# z( l8 t, I% i1 b7》页面异常
: \/ Z: t, J5 \! E. l- ]. N# u- l% n. A0 I" C/ R
8》访问存储器时使用错误地址+ X. k7 J% ?# w+ y% t
# U' V9 T  p# v0 N7 h  }" g2 Y
9》存储保护违例* e5 {, b" F# a

- Z0 X) Z2 Y% s2 L10》硬件故障1 k# ^6 m8 I2 z6 ~/ s* A

/ z% J0 i: v# K! \  e6 W, h11》断电
% E9 G" b) c6 G, k- s* A- y, W
5 b0 D; B! V# ?0 x( s) W3 Q3,Instruction Set Complications(指令集本身的复杂性)
8 i/ b" L7 p0 d- o  d$ M+ Y2 B! y. Q5 Y
有些体系结构的指令集用流水线实现起来就比较复杂。5 I" E5 M2 ?% V7 m" |+ D6 j

9 \" _7 m6 F4 f$ G$ h0 A) n2 y" g
这些问题,可以仔细看一下上面的两张图,好好想一下就能推断会出现这些问题,这一点很重要。" d! T! d9 Y) M7 s
" _* O7 G* {: E/ _
$ G" G5 K+ H$ A  j5 F4 }0 q+ O
5.3 解决技术
/ c  b4 u7 z" U8 C% `" b/ ~7 o+ }9 U7 N) a! R  _( U
先说一个式子:; i6 N" N: K7 C! B3 D" o6 A

. d  W9 a$ Y6 A+ X/ BPipeline CPI = Ideal pipeline CPI + Structural stalls + Data hazard stalls + Control stalls6 |. ^% M+ Z1 X- a) m2 h( @/ t" s
) k, j5 X/ J& G8 d
这些技术无外乎就是想方设法减小右边的4项内容其中的一项或几项。
' }6 |, z( ^+ `
% U. V- t8 q1 V1 o
; B: f% T& x, ~6 j& y1 m1 x  j6 g* {) h" P) X- c

% ^8 Q6 f8 r% L( P  H5.4小结
8 M. _! d5 I& U7 i2 I5 P
0 W- j0 s* X- Y: P, D流水线,在各行各业都有体现,想像一下,大学食堂,如果把卖豆浆,油条,咸菜,粥,米饭,馒头,。。。这些窗口都合成一个窗口,会是什么景象。2 d4 v9 P8 U4 m5 j) V: j

# r: _  L0 o! u( P( c2 g! ^这就是流水线的魅力。
7 z2 f5 n( v8 ]0 e- k* N( t. s/ B9 |
  • 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 14:03 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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