CPU背后的秘密.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CPU背后的秘密

CPU背后的秘密 ———详解寄存器 无论是台式机,服务器或者是笔记本电脑,处理器都是整个系统的核心。一般来说,处理器拥有对数据,内存和控制总线的控制权,根据指令控制整个计算机的运行。而在处理器内部,寄存器扮演着重要的角色:某类型的寄存器可以保存特定长度的数据,某类型的寄存器中保存的数据对于系统的运行有特殊的意义。。。。。。。。。而今天,当x86结构体系的个人电脑从32位过度到64位时,处理器内部的寄存器单元也出现了变化。 传统的x86架构,8个通用寄存器捉襟见肘 1 什么是寄存器 所谓寄存器(register), 它是CUP内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路。但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可构成N位寄存器。 2 寄存器与CPU指令 在讲CPU的寄存器之前,我们先了解一下CPU指令系统。指令系统指的是一个CPU所能够处理的全部指令的集合Athlon XP和 P4都是基于x86指令集,这是CPU的根本属性,决定CPU运行什么样的程序。 指令一般分为:算数逻辑运算指令,浮点运算指令,位操作指令及其他的一些非运算指令,其中整数,地址,指令指针和浮点数据是按照数据形式来划分的。通常我们把需要CPU进行不同处理的单个数据称为标量数据(Scala Data)。 GPR), 浮点标量数据的存放区一般为浮点寄存器(FPR)。 与标量数据相对的是矢量数据(Vector Data), 所谓矢量数据就是指一列需要由处理器作相同处理的数据集合。比如处理器在做MP3编码的过程中,需要对内存中的音频文件里的各字节数据作相同的MP3编码操作。那么通常使用MMX或SSE这类单指令多数据流(SIMD)指令, 将数个字节打包为一组矢量数据,存放在MMX或SSE 寄存器中,再送往相应的功能单元进行统一操作。 其中通用寄存器是处理器中最快的存储器,用来保存参加运算的操作数和中间结果。在通用寄存器的设计上, RISC与CISC(也就是我们常说的x86架构)有着很大的不同。 CISC的寄存器通常很少——只有8个通用寄存器。由于 CPU在执行指令过程中,存在指令依赖性,在一定程度上使用x86 CPU不能在每个时钟周期中立即发布大量的指令。所谓 “依赖性” 就是指令的执行需要前个指令的运算结果。比 如程序员经常使用的分支程序,请看这个例子: A=C*1 B=A+2 只要变量A的值还不知道,B=A+2就不能进行运算。也就是说,只要指令1的结果没有写进寄存器,CPU调度器就不能把指令2发布到执行单元。由于程序分支会造成具有较长流水线CPU运行停滞的,目前常用的解决方法是采用分支预测。 不过,分支预测同样存在一个问题:流水线越长,指令潜伏期越长,等待前一指令运算结果的时间也越长,同样会造成CPU运行停滞。我们知道,程序指令通常都有各类型的条件分支语句,通过验证条件决定执行路线。但CPU执行单元内是通过一项特殊的预测机制选择一条路线直接执行(这样一来可以避免验证语句条件而处于等待情况),然后在后面进行验证。如果预测正确则继续往下执行,如果发现以前的预测错误,那么就必须返回原地重新开始,以前的指令就会作废。 因此,管线越长,意味着出现分支预测错误的机会就越多,越多在管线内的指令会被清除掉,而且重新让管道填满指令的时间也会越长。对于普通处理器来说,如果出现分支预测错误,CPU就不得不将整条流水线清空后从错误的地方重新装满数据,重新执行。毫无疑问这将花更多的时间,整体性能就会下降。因此,针对通用寄存器少的问题,在x86架构中比较完美的解决方法就是增加寄存器的数量和采用 “乱序执行” 。 3。 为什么寄存器不够用 在上面我们已经提到,寄存器只是用来暂时存放指令值的,如果CPU需要把两个值加起来,它需要用1个寄存器来存放运算结果, 用两个寄存器来存放相加的数值。例如,在以下的方程式中:A = 2 + 4 * 在寄存器1储存 “2” ; * 在寄存器2储存 “4” ; * 在寄存器3储存 “寄存器1 + 寄存器2” ; 因为在微处理器里面有超过3个寄存器,因此这个运算能够轻易地执行,不会造成用光寄存器的情况。 在这些运算被执行之后,所有的3个数值都能够被保留并重新使用,因此如果我们再想在结果加上2的话,处理器只需要执行: 寄存器1 + 寄存器3 就可以了。 如果微处理器仅有2个剩余的寄存器,而我们又需要再次使用2和4的值,那么这些值在覆盖结果A之前,必须储存在主内存之中。运算执行的过程则回变成如下所示: * 在寄存器1储存 “2” ;

文档评论(0)

75986597 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档