zoukankan      html  css  js  c++  java
  • 《计算机组成与体系结构:性能设计》读后小记 12、CPU的结构和功能

    一、CPU组成

      1、组成:

        ALU:算术逻辑单元,完成数据的实际计算或处理

        控制器:控制数据的移入移出CPU

        寄存器:由一组存储位置极小的内部存储器组成

        CPU内部总线:在各寄存器和ALU之间传送数据

      2、CPU要完成的任务:

        取指令:从存储器(主存、cache、寄存器)读取指令

        解释指令:对指令进行译码

        处理指令:对数据完成算术或逻辑运算

        写数据:运算结果数据写到存储器或I/0模块

    二、寄存器组成

      1、组成:

        用户可见寄存器:允许机器语言或汇编语言的编程人员通过优化寄存器的使用而减少对主存的访问

        控制和状态寄存器:由控制器来控制CPU的操作,并由拥有特权的操作系统来控制程序的执行

      2、到目前为止,关于组织CPU寄存器的最好方式还没有一个普遍接受的原则,正如指令集设计的情况一样,也有众多的CPU设计观点,这些都还是有待品评的事情。

    三、指令周期

      1、间接周期:指令的执行涉及到从存储器中读取操作数,可能会使用到间接寻址,可以把间接寻址看成是一个额外的指令子周期,即间接周期。

      2、数据流:该小节讲述了在取指令阶段、指令执行阶段和中断周期阶段,PC(程序计数器)、MAR(存储器地址寄存器)、MBR(存储器缓冲寄存器)和IR(指令寄存器)中数据的移动方向与时序,详情见此书P283页。

    四、指令流水线技术

      1、定义:流水是指将指令周期分解成几个连续出现的阶段,如取指令、译码指令、确定操作数地址、取操作数、执行指令和写结果操作数。

      2、指令预取:在取指阶段取一条指令并缓存它,当执行阶段空闲时,将取指阶段缓存的指令输送给它。当执行阶段正在执行此指令时,取指阶段利用未使用的存储器周期读取下一条指令并缓存它。这称为指令预取或指令交叠。这种处理能加快指令的执行,理论上速率可以提升一倍,但是仅仅只是理论上,别想多了!至于原因,见P284页。

      3、流水线冒险:发生在流水线或流水线的某个部分,因为某些条件不允许流水线继续运行,而必须停顿的时候,这种停顿也称流水线空泡。通俗的说,就是几条指令想要并行取指、执行的时候,因为资源、数据或控制不得不等待其他指令的一种情况。

      4、三种流水线冒险:

        资源冒险:也称为结构冒险,主要是等待内存可用,或者算数逻辑单元可用的情况;

        数据冒险:需要访问同一内存中或寄存器中的数据时发生;

        控制冒险:又称为分支冒险,发生在流水线对分支转移做出了错误的预测,因此读取了在后期必须取消的指令之时。

      5、处理分支指令:

        多个指令流:条件分支流水线的开始部分,允许流水线同时取这两条指令,使用两个指令流;

        预取分支目标:识别出一个条件分支指令时,除了取此分支指令之后的指令外,分支目标的指令也被取来。说实话,我看的不太明白;

        循环缓冲器:由流水线指令取指阶段维护一个小的但极高速的存储器,含有n条最近取来的指令,其原理类似于指令高速缓存;

        指令预测:预测绝不发生、预测总是发生、依操作码预测、发生/不发生切换、转移历史表;

        延迟分支:自动重排程序中的指令,这样可以把一条分支指令移到实际所期望的位置之后;

  • 相关阅读:
    LintCode "Binary Tree Serialization"
    LeetCode "Find the Duplicate Number"
    LintCode "Route Between Two Nodes in Graph"
    LintCode "Search a 2D Matrix II"
    LintCode "Submatrix Sum"
    LintCode "Sort Letters by Case"
    LeetCode "Peeking Iterator"
    LintCode "Sort Colors II"
    LeetCode "Move Zeroes"
    LintCode "Update Bits"
  • 原文地址:https://www.cnblogs.com/gaojiang/p/4026572.html
Copyright © 2011-2022 走看看