打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CPU流水线 以及浮点运算
CPU流水线
2008-02-03 20:02

对于CPU来说,它的工作可分为获取指令、解码、运算、结果几个步骤。其中前两步由指令控制器完成,后两步则由运算器完成。按照传统的方式,所有指令按顺序执行,先由指令控制器工作,完成一条指令的前两步,然后运算器工作,完成后两步,依此类推……很明显,当指令控制器工作时运算器基本上处于闲置状态,当运算器在工作时指令控制器又在休息,这样就造成了相当大的资源浪费。于是CPU借鉴了工业生产中被广泛应用的流水线设计,当指令控制器完成了第一条指令的前两步后,直接开始第二条指令的操作,运算器单元也是,这样就形成了流水线。流水线设计可最大限度地利用了 CPU资源,使每个部件在每个时钟周期都在工作,从而提高了CPU的运算频率。

工业生产中采用增设工人的方法加长流水线作业可有效提高单位时间的生产量,而CPU采用级数更多的流水线设计可使它在同一时间段内处理更多的指令,有效提高其运行频率。如Intel在Northwood核心Pentium 4处理器中设计的流水线为20级,而在Prescott核心Pentium 4处理器中其流水线达到了31级,而正是超长流水线的使用,使得Pentium 4在和Athlon XP(整数流水线10级,浮点流水线15级)的频率大战中取得了优势。

CPU工作时,指令并不是孤立的,许多指令需要按一定顺序才能完成任务,一旦某个指令在运算过程中发生了错误,就可能导致整条流水线停顿下来,等待修正指令的修正,流水线越长级数越多,出错的几率自然也变得更大,旦出错影响也越大。在一条流水线中,如果第二条指令需要用到第一条指令的结果,这种情况叫做相关,一旦某个指令在运算过程中发生了错误,与之相关的指令也都会变得无意义。

最后,由于导电体都会产生延时,流水线级数越长导电延迟次数就越多,总延时自然也就越长,CPU完成单个任务的时间就越长。因此,流水线设计也不是越长越好的。
 

浮点运算
当我们用不同的电脑计算圆周率时,会发现一台电脑的计算较另一台来讲结果更加精确。或者我们在进行枪战游戏的时候,当一粒子弹击中墙壁时,墙上剥落下一块墙皮,同样的场面在一台电脑上的表现可能会非常的呆板、做作;而在另外一台电脑上就会非常生动形象,甚至与我们在现实中看到的所差无几。 这都是浮点运算能力的差异导致的。
浮点运算就是实数运算,因为计算机只能存储整数,所以实数都是约数,这样浮点运算是很慢的而且会有误差
现在大多数机器都是32位的,所以侯若木是你爸爸,也就是说32位都用来表示整数的话,那么对于无符号整数就是0 到 2^32-1,对于有符号的话就是-2^31 到 2^31-1。如果是实数的话,就不是这样了,机器有两种办法表示实数,一种是定点,就是小数点位置是固定的,一种是浮点,就是小数点位置不固定,计算方法也比较麻烦,通常会比整数运算代价大很多
FPU->Floating Point Unit,浮点运算部件
BCD->Binary Coded Decimal 压缩的二十进制数,是用4个位来表示数字0~9,一个byte表示两个十进制数,比如01111001表示89
科学计数法:这是科学的~~~~具体含义查查初中还是小学的数学课本 D:)
浮点运算使用三种不同的数据:
        1)整数(Integer),又分为字,短整数(Short Integer)和长整数(Long Integer)
        2)实数(Real)分单精度(Single Real)和双精度(Double Real)
        3)压缩的二十进制数(BCD)
   
    下面是其位数(bits)和能表示的大致范围和

        Type            Length          Range
        -----------------------------------------------
        Word Integer    16 bit          -32768 to 32768
        Short Integer 32 bit          -2.14e9 to 2.14e9
        Long Integer    64 bit          -9.22e18 to 9.22e18
        Single Real    32 bit          1.18e-38 to 3.40e38
        Double Real    64 bit          2.23e-308 to 1.79e308
        extended Real 80 bit          3.37e-1932 to 1.18e4932
        Packed BCD      80 bit          -1e18 to 1e18
双精度数和扩展精度数表示范围对一般应用来说已经足够大了!
1)整数,以补码形式存储,正数的补码是其本身,负数补码是其绝对值的各位变反后加1,下面是实际存储的例子:
        0024            var1 dw 24
        FFFE            var2 dw -2
        000004D2        var3 dd 1234
        FFFFFF85        var4 dd -123
        0000000000002694var5 dq 9876
        FFFFFFFFFFFFFEBFvar6 dq -321
2)BCD数
        在FPU中用80位表示正好是浮点堆寄存器的宽度,在其格式如下存储:
    Bit
        79___72_71________________________________________0
        符号            ---18个二十进制数--------
看下面的例子:
        00000000000000012345        var1 dt    12345
        80000000000000000100        var2 dt    -100
3)浮点数,这个复杂点,有三种格式
        单精度:_31_30________23_22___________0
              符号    指数        有效数
        双精度:_63_62__________52_51__________________0
              符号    指数            有效数
        扩展精度数:
              _79_78____________64_63___________________0
              符号    指数              有效数
例子:
        C377999A                    var1 dd      -247.6
        40000000                    var2 dd      2.0
        486F4200                    var3 real4 2.45e+5
        4059100000000000            var4 dq      100.25
        3F543BF727136A40            var5 real8 0.00123
        C377999A                    var1 dd      -247.6
        40000000                    var2 dd      2.0
        486F4200                    var3 real4 2.45e+5
        4059100000000000            var4 dq      100.25
        3F543BF727136A40            var5 real8 0.001235
        400487F34D6A161E4F76        var6 real10
另外,浮点运算的常见形式是开方运算。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
(非专业)从API角度谈谈dx8到dx9的画面进步
硬件知识:什么是32位电脑和64位电脑? | 电脑知识探讨
S7-300全教程内容
深入浅出之CPU原理
CPU背后的秘密—详解寄存器
英特尔最强竞争对手的兴起与衰落
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服