热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

《计算机组成与体系结构:性能设计》读后小记13、精简指令集计算机

一、指令执行特征1、精简指令集计算机(RISC)的关键特征:(1)有限的指令集并具有固定格式;&

一、指令执行特征

  1、精简指令集计算机(RISC)的关键特征:

    (1)有限的指令集并具有固定格式;

    (2)大量的寄存器或利用编译器来优化寄存器的使用;

    (3)强调对指令流水线的优化;

  2、操作:研究结论中,赋值语句和条件语句在程序中占有很大比例,这表明简单的数据传送和指令集的顺序控制机制都很重要。

  3、操作数:Pascal和C程序中主要使用简单标量变量,而且80%以上的标量是(过程的)局部变量。所以,优化的主选方向是对局部标量变量的存储和访问。

  4、过程调用:过程调用和返回是HLL(高级语言)程序中最耗时的操作,其中过程使用的参数及变量和嵌套的深度有显著意义。研究发现,程序保持在相当窄的过程调用窗口区域内,进一步证实了操作数访问是“高度局部化”的。

  5、推论:试图让指令集结构更接近HLL并不是一个有效的策略。相反,通过优化典型HLL程序中最耗时操作的性能,能更好地支持HLL。

 

二、大存储器组方案的使用

   1、采用寄存器的理由:

    (1)寄存器是比主存和cache还要快的最快存储装置;

    (2)寄存器从物理上讲是最小的,通常是与ALU和控制器在同一芯片上;

    (3)并且使用比主存和cache地址还要短的地址;

  2、寄存器窗口

    (1)由于过程调用的嵌套深度过多,会导致数据频繁的在寄存器和存储器中传递。故总结两条结论用于解决这个问题:

      A、一个典型的过程调用只使用少量的传送参数和局部变量;

      B、过程调用的深度仅限定在一个相对窄的范围内;

    (2)环形缓冲器:寄存器窗口只用于保持少数最近过程的调用,更早的过程调用必须保存到存储器中,当嵌套深度减少时再恢复。

   3、解决全局变量的两种方式:

    (1)由编译器为高级程序设计语言(HLL)中声明的全局变量指派存储器位置,所有访问这些变量的机器指令将使用存储器引用的操作数;

    (2)在CUP中包括一组全局寄存器,这些寄存器的数量是固定的,并且可以被所有寄存器使用;

  4、大寄存器组与高速缓存的对比:尽管cahce能与寄存器组一样的快,但cache的存取时间肯定要长。于是,从性能观点看,基于窗口的寄存器组对于局部标量而言是更优化的。通过加入专门的指令cache,能进一步改善性能。

三、基于编译器的寄存器优化

   其原理不太懂,具体见P315页。

 

四、精简指令集体系结构

   1、采用CISC是理由:

    (1)简化编译器;

    (2)CISC可生成更小、更快的程序;

  2、CISC上的真实情况:

    (1)CISC上的编译器有偏爱简单指令的倾向,结果使得复杂指令所提供的简洁性很少发能发挥作用;

    (2)CISC上更多的指令数要求较长的操作码,这使指令较长;

    (3)RISC强调寄存器而不是存储器的访问,因而要求的指令位数也更少;

  3、使用CISC的结论:

    (1)并不能生成更小的程序;

    (2)并不能生成更快的程序;

  4、精简指令集的共同特征:

    (1)每机器周期一条指令:机器周期被定义成由寄存器取两个操作数,ALU完成算术操作,然后再将结果写入寄存器的时间;

    (2)大多数操作应是寄存器到寄存器的,只以简单的LOAD和STORE操作访问存储器;

    (3)使用简单的寻址方式。几乎全部指令都使用寄存器寻址方式,其他几种寻址方式,像偏移寻址和PC相对寻址,也可能包含进来;

    (4)使用简单的指令格式,而且通常仅使用一种或少数几种格式;

  5、RISC的潜在优势:

    (1)能开发出更有效的优化编译器;

    (2)编译器生成的大多数指令从任何方面讲都是相对简单的指令;

    (3)RISC程序应能更好的响应中断,因为中断是相当于在基本操作之间检查的;

 

五、RISC流水线技术

  1、使用规整的流水线技术

  2、流水线的优化,没看懂,详情见P320

  3、指令流水线的设计不应与其他适用于系统的优化技术隔离开进行。例如,流水的指令调度策略应与寄存器的动态分配一起考虑,以提高效率。

转:https://www.cnblogs.com/gaojiang/p/4026610.html



推荐阅读
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • DSP中cmd文件的命令文件组成及其作用
    本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
author-avatar
你的美我chase
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有