热门标签 | 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



推荐阅读
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 配置Windows操作系统以确保DAW(数字音频工作站)硬件和软件的高效运行可能是一个复杂且令人沮丧的过程。本文提供了一系列专业建议,帮助你优化Windows系统,确保录音和音频处理的流畅性。 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本文介绍了如何通过配置 Android Studio 和 Gradle 来显著提高构建性能,涵盖内存分配优化、并行构建和性能分析等实用技巧。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
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社区 版权所有