|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
引言
/ @/ i l' L; P5 q
r6 }; n# v4 f5 u! f% ?6 N6 ^ X$ `+ k1 u阵而后战,兵法之常,运用之妙,存乎一心。5 {6 p. k- I7 e5 K% |& C
/ g. ^9 r7 m) t+ E2 x. n' T先说两个概念:
4 t9 L7 {* k8 D% C! q1 R# ^: \/ W: W5 x+ X# X
1》图灵机:说白了,一句话,就是当前状态,和输入,共同决定输出内容。这样的机器,就是图灵机。图灵,是个名人,也是个人名,在二次世界大战中在一个小区里做出了很大贡献,当然不是他一个人在战斗。
0 ?- T3 ~$ V0 _1 Z: K1 u0 m( [6 X" ]8 b" i0 [. Y* m
2》计算机体系结构(冯。诺依曼):也说白了,一句话,就是,数据和操作都放在存储器中,CPU从存储器中取操作和数据,然后进行根据操作把数据运算一下,最后把运算结果也放到存储器中。操作和数据合在一起就是一条“指令”。很多指令合在一起,就是一个指令集。在很多年前,指令集在一定程度上就代表着计算机体系结构。
% U& t' c4 ]( o0 |- ~9 e) a- r: C x. b/ K) n! Q6 I8 ^, I
冯。诺依曼体系结构就是图灵机的具体实现方式之一。) _7 S+ W9 f: R! T# P( r/ \) _7 H
; W4 q6 F9 f9 A1 p7 W, v6 _
针对图灵机,举个例子,在大学的数字电路都学过的话就会发现,整个内容可以分成两类,一类是组合逻辑电路(由基本与或非门电路组成),一类是时序逻辑电路(由带反馈的门电路构成的触发器)。其实,要想有“当前状态”,就需要触发器(触发器组成寄存器),要想对输入和当前状态进行处理,就需要组合逻辑电路。组合电路和时序电路共同组成了现在的大规模集成电路,和超大规模集成电路(VLIC)。+ b1 Q% L2 A: q% S) {
8 g8 d' U. i9 j! G
针对计算机体系结构,也举个例子:* P3 E5 W3 E6 ~% L* e2 n. y
% t2 Y, S' a# o7 A) e D. V
1》,上世纪六七十年代,计算机体系结构,几乎就等同于ISA(指令集),这句话需要仔细体会一下。
9 @' R# M8 W5 W
; k3 Z1 g; {2 d" {3 n; u% }: Q2》,上世纪八九十年代,“存储墙”导致了cache的出现,21世纪初,“功耗墙”导致了多核的出现,下一步,“带宽墙”会带来什么变革呢?/ X1 c$ w! C2 X7 p d4 j- F
' Y" C% R8 ?& J/ X
3》,汽车刚出现的时候,追求的是汽车能跑的快,试想,如果汽车还不如马车跑得快的话,还买汽车啊。但是你看现在,追求的是油耗,是跑100公里耗几个油儿。这,就是时代的进步。* {- V4 M, {1 `) ]9 c+ ]7 ]/ m
" V6 D2 ]4 E! @) [4》还要记住一点,就是principle of entropy increase。即熵增加原理,在孤立系统中,一切不可逆过程必然朝着熵增加的方向进行。熵是什么呢,就是体系的混乱程度。计算机的工作的本质,就是把无序的事情变得有序。6 j7 G3 D7 D: k: D- a( D) [
; n7 T0 n. o7 t$ v+ ]! m
& F3 V. q$ m( I计算机体系结构
' y( a0 g( [9 r' O' q {; d% K5 r n" B: T4 I# p- g& \9 A( h3 B2 f
反过头去看一下冯诺依曼体系结构,' N4 F4 a$ m: _' x
' u! t h6 U9 d" |6 ?3 s
1》刚开始,要想让计算机运行的更快,就是要给CPU提供足够的操作和数据,为了提供操作(指令)就引进了转移预测技术,为了提供数据就引进了cache技术,为了提高执行速度,; _# n3 C8 p. S8 Z. g5 ~3 Q
9 A$ W) [9 t/ R
2》就有了流水线,有了流水线就有了流水线遇险(hazard)的问题,包括(RAW,WAR,WAW),5 i" Q0 F4 v* V( a
; x6 ?7 B& p- N/ x+ d; k: K
3》为了解决RAW,就引入了直通(bypass)技术,
' ]) \$ |; a7 g8 w/ p. a( [ y* @/ p4 g U& b9 B0 L8 O9 O
4》为了解决WAR和WAW,就引入了乱序执行技术,即保留站技术(tomasulo),寄存器重命名(renaming)技术,/ D8 r0 Y% C0 z
8 L5 x2 v8 M2 r& Q' v5》但是乱序执行就使异常不精确(精确异常,就是异常产生时要保证,产生异常的这条指令前面的指令都执行完毕,后面的指令都没有执行,这样,异常返回后知道从哪开始执行),
* q( ]" s" b" @, \1 f2 q, e; e1 s' q }! ?
6》为了实现精确异常,就引进了重排序缓存技术(ROB:reorder buffer),
, z, F0 K# e j+ \/ @, V& l; T+ m) i' [) ^" J* n* y1 h
自此,纵观一下,体系结构的工作就是,顺序进入,乱序执行,有序提交,这样一个过程。
0 f' m: G) Z6 f) a. G0 i; r. H# q! ^& b# x1 r+ p
. f* ~. o( I, r+ W即使这样,人类还不满足,于是再增加流水线的条数,即超标量,9 d; p, B( y7 {- Q
: y, U) ]# i( _' z
把流水线的级数增加以提高工作平率,即超流水线。& R$ i( D9 X' s4 s u2 F* I
% H6 b; O) p* p8 `
以上这些,归于5个字:指令集并行(ILP)。5 f' w! T' E0 G. i, _- F; O( h) y
+ M; r/ H8 v5 |6 e
所以人们又开发线程级并行技术,进程级并行。所以就有了多核的CPU。当然,事情还不只这些,暗硅(dark silicon)问题,工作电压接近晶体管阈值,集成度造成的功耗问题,等等等等这些,人们就相出了很多办法,单个CPU咱们进一步有困难,咱们就把多个CPU放在一块,咱们就搞ASIC,搞FPGA,搞CPU和ASIC的混合物(heterogeneous architecture)。
: @3 d% b! \" p3 _# ]3 X! Y7 g; \$ L& t5 r! V j+ p8 z4 \& X
) \# \# {- v* D- Y一个小故事
- M7 a1 d5 b7 r
' X2 [$ o# l* m3 ^% F1 I5 {上面包含了很多概念,下面就通过我的一个小故事来说明一些概念的意思。
/ d, k8 W$ N% s q: H2 |3 u, o' m2 X/ ~+ {# b' j
上周末,我和我的媳妇,我的一个朋友和他的媳妇,我们四个人从老家出发一起来北京,我们共开了2辆车,我朋友的车是奔驰,我的车是帝豪(跟奔驰没法比)。我们4人2车就上路了,故事也就开始了:
+ f# U5 a9 o5 R3 s5 o. z5 G" x5 E2 n
由于我们家是农村的,所以农村的路都是单行道,没法超车,我的车在前面,跑的很慢,后面的车再好也没办法,只能在屁股后面跟着,(静态流水线)。: Z5 D+ P+ ~/ S( s) Z
) F' I. q- F8 }$ e$ q- `3 W7 O0 J
过了一会,有一个北京的同学(小武)给我打电话说上星期借我的那本《HeadFirst》看完了,说等我回北京后在还给我,我说行,这时我媳妇说,”小峰不是说要借这本书看吗,直接让小武把书给小峰不就得了吗,真是的,这么费劲,这样的话就不用等你回北京,然后小武把书给你,你再给小峰,多麻烦啊,还省得小峰等的着急“(直通技术)。
+ `$ F$ K, m: T5 _ o1 M; u7 D' q6 I1 [/ e) E2 V3 u0 D! o
终于,路变得宽了一些,,这时,我就把车开到了靠路边的地方(保留站),+ e1 g, t( ~. q& ]& o' k
( r- \: |' ]" i6 }, Q J
奔驰不用再等我这辆小破车了,呜。。。一下子就跑到了我前面(动态流水线乱序执行)," N/ K: f' _/ ^7 D. r
* b2 a* p8 [/ U8 F
终于,上高速了,车道一下子变成了4个(多发射或超标量),
& ^, [- G$ M6 u; z- A6 c4 M* }7 m5 A4 w$ }& c/ ~% Z: \. R
后来我们出了收费站,到了北京,马路多了很多条,有很多路线都可以到我住的那个地方(多核),( Y3 B, o5 R& G5 C5 \: O' y. u& u: r
# B* z: B, n7 r$ `+ V# ^
最后我们四个人到了我们家,我们家的大门口比较小,依次只能通过一个人,于是我们按照我们刚出老家的顺序,进入了我们家。(ROB). e- R; a' l$ ~! k* G1 v1 k
5 U# |9 \; Z8 b) p
到此为止,好了,有些地方可能不是太准确,请见谅。
7 [( H. D& \! J7 \3 Q+ E+ k/ X0 Y: q) y% P- c
0 B6 V- N g/ `
附:9 _6 k4 D4 \1 [0 U! M. G, n
1 O8 M: c4 T$ j( M& i8 n上面这些内容都是给CPU提供足够的粮食来喂饱饥饿的CPU,当然也不能忽略CPU的本质,就是计算。虽然计算模块在现在CPU的面积比例已经很少(20%左右),还是提一下吧,加法器,乘法器。乘法器的实现,是运用Booth算法,和华莱士树将两个数的相乘,变成两个数的相加来实现的。% J) D8 l- T7 l5 |& ^& q1 V
/ n5 ^. ?& o1 r. l小结8 X/ }2 P9 R8 f* B; u( y8 n
: b2 }* j) U: h( p( y6 _书上学来终觉浅,绝知此事要躬行。最后以龙芯的框图来结束本文吧。) Z! p0 Y3 A5 ~7 X' u, h
: ~' V& k+ i$ H- ^6 S
( g8 i" t N+ w0 G
W' q5 v* L8 x5 {; x3 q
. u3 N0 C1 \& Y+ l! K" [ |
|