EDA365电子论坛网
标题:
介绍一下计算机体系结构
[打印本页]
作者:
haidaowang
时间:
2020-1-15 09:37
标题:
介绍一下计算机体系结构
引言
, e4 l/ t/ s/ g u1 Y7 X' I) W
+ H# ^) o+ g- D+ E
阵而后战,兵法之常,运用之妙,存乎一心。
+ k2 q' ~' q6 C' F" W, N
# d2 V, N" T0 V% \. ^" k" u
先说两个概念:
% i6 B' E* S4 f
$ e$ a! y0 q$ F& S# [: u
1》图灵机:说白了,一句话,就是当前状态,和输入,共同决定输出内容。这样的机器,就是图灵机。图灵,是个名人,也是个人名,在二次世界大战中在一个小区里做出了很大贡献,当然不是他一个人在战斗。
9 k. D" }: A J0 _, a" U
J* f, R8 n& q+ z8 Q& Z: O! i
2》计算机体系结构(冯。诺依曼):也说白了,一句话,就是,数据和操作都放在存储器中,CPU从存储器中取操作和数据,然后进行根据操作把数据运算一下,最后把运算结果也放到存储器中。操作和数据合在一起就是一条“指令”。很多指令合在一起,就是一个指令集。在很多年前,指令集在一定程度上就代表着计算机体系结构。
; _0 {% \, O! I. z8 {
6 [( E) M5 ?! f1 `+ `4 N* Y
冯。诺依曼体系结构就是图灵机的具体实现方式之一。
( y$ g4 b* ]7 |8 F0 l7 n
& F L! s% q7 U. H
针对图灵机,举个例子,在大学的数字电路都学过的话就会发现,整个内容可以分成两类,一类是组合逻辑电路(由基本与或非门电路组成),一类是时序逻辑电路(由带反馈的门电路构成的触发器)。其实,要想有“当前状态”,就需要触发器(触发器组成寄存器),要想对输入和当前状态进行处理,就需要组合逻辑电路。组合电路和时序电路共同组成了现在的大规模集成电路,和超大规模集成电路(VLIC)。
: m0 N8 m. }' [8 a; `
" a% d, d3 k4 P( d6 K/ d- v
针对计算机体系结构,也举个例子:
: h8 z1 [& R+ b
3 H) e1 e4 C J, g0 l
1》,上世纪六七十年代,计算机体系结构,几乎就等同于ISA(指令集),这句话需要仔细体会一下。
' P% |. c% r: o6 o# y) z
. `( c, t% @6 f8 `
2》,上世纪八九十年代,“存储墙”导致了cache的出现,21世纪初,“功耗墙”导致了多核的出现,下一步,“带宽墙”会带来什么变革呢?
& F t! ]' f& e- D' [' q
. t2 r8 W: Z0 k7 L5 p
3》,汽车刚出现的时候,追求的是汽车能跑的快,试想,如果汽车还不如马车跑得快的话,还买汽车啊。但是你看现在,追求的是油耗,是跑100公里耗几个油儿。这,就是时代的进步。
" P: _8 }: d# ]9 o! [$ @/ r0 y' X
. y1 N, S* G$ S) j
4》还要记住一点,就是principle of entropy increase。即熵增加原理,在孤立系统中,一切不可逆过程必然朝着熵增加的方向进行。熵是什么呢,就是体系的混乱程度。计算机的工作的本质,就是把无序的事情变得有序。
# M* ~! f3 o5 i% O V
C2 H9 o8 K& I4 ?, Y7 D
/ k( F8 x& _0 \% x% r/ ], Q- q' O
计算机体系结构
: H, M( T4 I) i' H" F) ^' q# l/ q
0 k2 d' G4 [3 z" s- R# O
反过头去看一下冯诺依曼体系结构,
( Q0 Q. F: V* [ V o( r
' P7 f6 `6 U! t, I0 |
1》刚开始,要想让计算机运行的更快,就是要给CPU提供足够的操作和数据,为了提供操作(指令)就引进了转移预测技术,为了提供数据就引进了cache技术,为了提高执行速度,
- }7 m3 R) X& F# P, C! Q: z& y
+ w# y) D( N z1 \' b' f
2》就有了流水线,有了流水线就有了流水线遇险(hazard)的问题,包括(RAW,WAR,WAW),
, `8 K2 X2 y, M* M1 o. ^# H$ ~: [- g
) G; B- e F1 w
3》为了解决RAW,就引入了直通(bypass)技术,
6 e5 M) U+ M1 b" L) t1 g, J
& g9 v; C* D6 w P0 T+ F8 z& k
4》为了解决WAR和WAW,就引入了乱序执行技术,即保留站技术(tomasulo),寄存器重命名(renaming)技术,
7 N. p5 R+ p' ?1 `3 v
) C- e" X. U- C+ G/ Q" Y5 y0 _
5》但是乱序执行就使异常不精确(精确异常,就是异常产生时要保证,产生异常的这条指令前面的指令都执行完毕,后面的指令都没有执行,这样,异常返回后知道从哪开始执行),
( F3 x3 R' I: ~/ ^, D
+ G7 @8 J6 P5 |( t0 S7 Y1 V, I# O
6》为了实现精确异常,就引进了重排序缓存技术(ROB:reorder buffer),
9 a, t7 w! H+ R
) R5 v1 y% S6 a! u
自此,纵观一下,体系结构的工作就是,顺序进入,乱序执行,有序提交,这样一个过程。
' [# J! Q0 M- x( {5 ?, q8 m
( D2 ` v' i! n9 c
4 i* K. x3 L" i( o
即使这样,人类还不满足,于是再增加流水线的条数,即超标量,
. i/ {5 p) ~8 ]9 s$ M) F
# x9 j t p! y$ x3 e# S
把流水线的级数增加以提高工作平率,即超流水线。
7 J9 ~: ?+ C6 j9 M- v7 s" a
9 h# A: \5 E4 c5 n4 z
以上这些,归于5个字:指令集并行(ILP)。
0 y! Z, x7 w+ P" ]
- g7 w- n5 J) ^ m$ ?9 b
所以人们又开发线程级并行技术,进程级并行。所以就有了多核的CPU。当然,事情还不只这些,暗硅(dark silicon)问题,工作电压接近晶体管阈值,集成度造成的功耗问题,等等等等这些,人们就相出了很多办法,单个CPU咱们进一步有困难,咱们就把多个CPU放在一块,咱们就搞ASIC,搞FPGA,搞CPU和ASIC的混合物(heterogeneous architecture)。
8 O2 u- g/ M1 p. [
. D3 p( u- q0 E
+ R* \+ u, ?: ]/ ^% ?
一个小故事
1 S" Z8 _0 {7 W1 {. V: p, X7 B% j
/ ?0 {+ S _& t9 E0 w
上面包含了很多概念,下面就通过我的一个小故事来说明一些概念的意思。
+ j( t! j2 X8 j( A- l+ b
[2 N$ H) @' @) \5 g4 X. ^. q( W' j
上周末,我和我的媳妇,我的一个朋友和他的媳妇,我们四个人从老家出发一起来北京,我们共开了2辆车,我朋友的车是奔驰,我的车是帝豪(跟奔驰没法比)。我们4人2车就上路了,故事也就开始了:
% _; U/ S8 b2 m: D
; S# Q X1 I3 H5 k2 Z
由于我们家是农村的,所以农村的路都是单行道,没法超车,我的车在前面,跑的很慢,后面的车再好也没办法,只能在屁股后面跟着,(静态流水线)。
& J. { _, ?7 l0 @8 N
! r3 N8 L7 F; m' J/ F# O
过了一会,有一个北京的同学(小武)给我打电话说上星期借我的那本《HeadFirst》看完了,说等我回北京后在还给我,我说行,这时我媳妇说,”小峰不是说要借这本书看吗,直接让小武把书给小峰不就得了吗,真是的,这么费劲,这样的话就不用等你回北京,然后小武把书给你,你再给小峰,多麻烦啊,还省得小峰等的着急“(直通技术)。
$ d3 L7 l$ W1 o- k& N" z, ~! L' N
( E T4 r2 O0 k% V; P: G) ~
终于,路变得宽了一些,,这时,我就把车开到了靠路边的地方(保留站),
8 B- \& B" R% Z
8 y/ W. [4 \. m
奔驰不用再等我这辆小破车了,呜。。。一下子就跑到了我前面(动态流水线乱序执行),
5 H0 J1 J; I/ H) M& }
8 {/ t: Y( n3 u) V
终于,上高速了,车道一下子变成了4个(多发射或超标量),
& |6 j- G) S, R( N" F
: `# A8 t! v8 _9 s o
后来我们出了收费站,到了北京,马路多了很多条,有很多路线都可以到我住的那个地方(多核),
9 c" C( F) B: W5 R
( k% |6 I* {8 l( z6 H
最后我们四个人到了我们家,我们家的大门口比较小,依次只能通过一个人,于是我们按照我们刚出老家的顺序,进入了我们家。(ROB)
* m9 b; y) ]% U7 h7 ~# q
2 k2 q4 X5 ~5 e: X
到此为止,好了,有些地方可能不是太准确,请见谅。
9 U: M& S8 ^4 b) _- Y w
( n" ~) p" J! e7 i) o4 _( Q& ~
" r7 ?8 o# `9 I/ u; K; ]
附:
" C( U$ {6 R( y, B
* ^& X4 u% u% q' X7 o/ A
上面这些内容都是给CPU提供足够的粮食来喂饱饥饿的CPU,当然也不能忽略CPU的本质,就是计算。虽然计算模块在现在CPU的面积比例已经很少(20%左右),还是提一下吧,加法器,乘法器。乘法器的实现,是运用Booth算法,和华莱士树将两个数的相乘,变成两个数的相加来实现的。
% q2 C$ S; O4 I
5 H) e. P2 L) F5 m* k& T, p
小结
. C1 o3 e5 l7 d c$ U
1 k% C" L$ V9 F/ j2 g
书上学来终觉浅,绝知此事要躬行。最后以龙芯的框图来结束本文吧。
1 m! W4 G" e- h9 K, y3 }4 n$ j
, S8 ~' Q: T- _7 w8 @# l
介绍一下计算机体系结构-1.jpg
(59.76 KB, 下载次数: 2)
下载附件
保存到相册
2020-1-15 09:37 上传
" c( n% l# [, m0 w3 U% }
. S- \* v0 a* o$ h' E
( R6 j9 ]/ }# M7 Q* |/ k/ K
作者:
CCxiaom
时间:
2020-1-15 17:58
计算机体系结构
作者:
airuntao
时间:
2020-1-17 14:06
不知所云...............................
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2