当前位置: 首页 > news >正文

计算机组成与体系结构 性能设计 William Stallings 第2章 性能问题

2.1 优化性能设计

例如,当前需要微处理器强大功能的桌面应用程序包括:

图像处理、三维渲染、语音识别、视频会议、多媒体创作、文件的声音和视频注释、仿真建模

从计算机组成与体系结构的角度来看,一方面,现代计算机的基本组成与50多年前的IAS计算机几乎一样;另一方面,从现有材料中挤出最大性能的技术变得越来越复杂。

随着对计算机各个要素和组成部分的讨论,我们追求两个目标:其一,本书解释了考虑到的每个部分的基本功能;其二,本书讨论了获取最大性能所需要的技术

2.1.1 微处理器速度

只要摩尔定律有效,芯片制造商每三年就可以推出新一代芯片--其晶体管的数量是现在的4倍。对内存芯片而言,每三年动态随机访问存储器的容量就会增加4倍,DRAM仍然是计算机主存的基本技术。

自1978年英特尔推出x86系列以来,新电路的加入以及缩短电路之间距离所带来的速度提升,使其性能每三年就能提高4~5倍。

但是微处理器的原始速度无法发挥其潜力,除非是计算机指令的形式向其输入不间断的工作流。任何妨碍其顺畅流动的东西都会削弱处理器的能力。处理器设计者必须拿出越来越复杂的技术来“喂饱”这个芯片怪物。当代处理器内置的技术包括:

流水线:指令的执行涉及多个操作阶段,其中包括取指,译码,取操作数,执行计算等。流水线能够使处理器处理多条指令,这些指令在同一时间内执行不同的阶段操作。

分支预测:处理器从内存预取指令,并根据它预测未来:下一步可能处理那些分支或指令组。如果处理器大部分时间猜测都是正确的,它就能预取正确的指令并缓存它们,使得处理器保持忙碌。

超标量执行:每个处理器时钟周期内发射多条指令的能力。实际上,要使用多条并行地流水线。

数据流分析:处理器分析那些指令依赖其他指令的结果或数据,以便创建优化的指令调度。

推测执行:使用分支预测和数据流分析,一些处理器在程序执行时,可以在指令实际出现前进行预测性的执行,其结果将暂存在临时位置,让其执行单元尽可能保持忙碌。

以上这些处理器内置技术和其他复杂技术的共同作用使得每个处理器周期处理多条指令成为可能,美不是每一条指令都占用多个周期。

2.1.2 性能平衡

虽然处理器能力以极快的速度向前发展,但计算机的其他关键部件没有跟上发展速度。其结果就是需要寻找性能平衡:对组成和体系结构进行调整/调优,以补偿各组件之间的不匹配。

这种不匹配造成的问题对处理器与主存之间的接口来说尤为重要。因为其接口是计算机中最关键的路径,因为它负责在内存芯片和处理器之间不断传输程序指令和数据,如果该路径无法满足处理器的持续需求,处理器将会处于等待状态。

系统架构师通过多种办法来解决这一问题,所有方法在当代计算机中都有所反映。请思考下列:

让DRAM“更宽”而不是“更深”,以及使用宽总线数据路径来增加一次检索的位数;

让DRAM芯片中包含高速缓存或利用其他缓冲方法来改变DRAM接口,使其更有效。

通过在处理器核主存之间集成日益复杂和高效的高速缓存结构来减少内存访问的频率。这包括在处理器芯片上集成一个或多个高速缓存,以及在靠近处理器芯片的地方集成一个片外高速缓存。

通过使用更高速的总线以及总线层次结构来缓冲和构造数据流,增加处理器与内存之间的互联带宽。

但数据在处理器和外设之间的传输仍然是个问题。应对策略包括缓存和缓冲方案,使用更高速的互连总线,以及更复杂的 互连结构,另外,使用多处理器配置也有助于满足IO需求。

这一切关键是平衡。设计人员不断平衡处理器组件、主存、IO设备和互连结构的吞吐量与处理器需求,以应对2个不断发展的因素:

不同类型的元素在各种技术领域(处理器、总线、内存、外设)中性能变化的速度有很大的不同;

在典型指令文件和数据访问模式方面,新的应用和新的外围设备不断改变着系统需求的性质;

2.1.3 芯片组成与体系结构的改进

在应对平衡处理器与主存以及其他计算机组件的挑战时,仍然需要提高处理器速度。有3种方法可以提高处理器的速度:

1. 提高处理器硬件的速度,原因自傲与缩小了处理器芯片上逻辑门的尺寸。

2.增加处理器与主存之间高速缓存的大小和速度。通过让处理器芯片的一部分专门用于高速缓存来显著降低高速缓存访问时间。

3.改变处理器组成体系结构来提高指令执行的有效速度。涉及使用一种或多种形式的并行。

性能提升的主要因素是时钟速度和逻辑密度的增加。当随着这二者的增加,一些障碍变得更加突出:

功率:随着芯片逻辑密度和时钟速度的增加,功率密度成平方增加;

RC延迟: 延迟会随着RC产品的增加而增加。当芯片上组件的尺寸减少时,其连线会变窄,电阻就会增加。

内存延迟和吞吐量:内存访问的延迟和吞吐量滞后处理器速度;

从20世纪80年代末开始的15年内,2个主要策略被用于提高性能,超越了仅靠增加时钟速度来获得的性能。

其一,增加高速缓存容量。例如处理奔腾芯片上大约10%的区域是高速花奴村,而当代芯片则有超过一半的区域是高速缓存。而且,通常情况下,另一半的3/4用于流水线相关控制和缓冲。

其二,处理器内的指令执行逻辑变得越来越复杂,以便指令能在处理器内并行执行。流水线和超标量是2种值得注意的设计方法。流水线的工作原理和制造工厂中的装配线类似,它能让不同指令的不同执行阶段在流水线中同时发生。超标量方法从本质上看就是允许单个处理器有多条流水线,这样就可以并行执行互不依赖的指令。

到了20世纪90年代中后期,这2种方法都达到了收益递减的拐点。当代处理器的内部组织极其复杂,能够从指令流中挤出大量的并行性。但是这个方向上进一步显著增长似乎将相对平缓。而对处理器芯片上的3级高速缓存来说,每一级的容量都比较大,所以高速缓存的优势似乎也到达了极限。

然而,紧靠增加时钟频率来提高性能就会遇到前面所说的功耗问题。时钟频率越快,消耗的功劳越大,已经达到了一些基本的物理极限。

2.2 多核、MIC和GPGPU

考虑到上一节提到的所有困难,设计人员已经转向一种改进性能的全新方法:将多个处理器放在同一个芯片上,并配以大容量的共享高速缓存,即多核处理器。

在处理器内部,性能的提高大致与复杂度增加的平方成正比。但是,如果软件能支持使用多个处理器,那么处理器的数量翻倍几乎就能性能翻倍。

此外,对于两个处理器而言,更大的高速缓存是合理的。这一点很重要,因为芯片上的存储逻辑的功耗比处理逻辑的功耗要小很多。

刚开始的时候,一级高速缓存专门用于单个处理器,二级和三级则由所有处理器共享。现在常见的是,二级高速缓存也是每个内核私有的。

多核和MIC策略涉及单芯片上通用处理器的同构集合,同时,芯片制造商正在寻找另一种设计方案,一个芯片上含有多个通用通用器,再加上图形处理器和专门用于视频及其他任务的内核。

2.4 计算机性能的基本度量

2.4.1 时钟速度

从根本上说,处理器速度由时钟产生的脉冲频率决定,衡量单位是每秒的周期个数,即赫兹Hz。脉冲之间的时间就是周期时间。

时钟频率不是任意的,而是要适合处理器的物理布局。

指令的执行涉及多个离散的步骤,比如从内存取指令,译码指令的各个部分。

2.4.2 指令执行速度

在任何给定处理器上,诸如加载、存储、分支等不同类型指令需要的时钟周期数不同。令CPI i为i类指令的周期数,

性能因素受五个性能因素受4个系统属性的影响:指令集的设计(称为指令集架构);编译器技术(编译器从高级语言程序生成高校机器语言的效率);处理器的实现,以及告诉缓存和内存层次结构。

另一种常用的性能度量只用于处理浮点指令

相关文章:

计算机组成与体系结构 性能设计 William Stallings 第2章 性能问题

2.1 优化性能设计例如,当前需要微处理器强大功能的桌面应用程序包括:图像处理、三维渲染、语音识别、视频会议、多媒体创作、文件的声音和视频注释、仿真建模从计算机组成与体系结构的角度来看,一方面,现代计算机的基本组成与50多…...

anaconda详细介绍、安装及使用(python)

anaconda详细介绍、安装及使用1 介绍1.1 简介1.2 特点1.3 版本下载2 Anaconda管理Python包命令3 安装3.1 windows安装4 操作4.1 Conda 操作4.2 Anaconda Navigator 操作4.3 Spyder 操作4.4 Jupyter Notebook 操作5 示例参考1 介绍 1.1 简介 Anaconda是用于科学计算&#xff08…...

雅思经验(6)

反正我是希望遇到的雅思听力section 4.里面填空的地方多一些,之后单选的部分少一些。练了一下剑9 test3 的section 4,感觉还是不难的,都是在复现,而且绕的弯子也不是很多。本次考试的目标就是先弄一个六分,也就是说&am…...

CentOS9源码编译libvirtd工具

卸载原有版本libvirt [rootcentos9 ~]# yum remove libvirt Centos9配置网络源 [rootcentos9 ~]# dnf config-manager --set-enabled crb [rootcentos9 ~]# dnf install epel-release epel-next-release 安装依赖包 [rootcentos9 ~]# yum install -y libtirpc-devel libxml2-de…...

搭建内网穿透

文章目录摘要npsfrp服务提供商摘要 内网穿透是一种方便的技术,可以让用户随时随地访问内网设备。有两种方式可以使用内网穿透:自己搭建,使用nps/frps软件;购买服务,快速享受内网穿透带来的便利。 nps 内网穿透。参考…...

vue3组件库项目学习笔记(八):Git 使用总结

目前组件库的开发已经接近尾声,因为这次是使用 git 进行协作的开发模式,在团队协作的时候遇到很多的问题,开发过程中发现小伙伴们对于 git 的使用还不是很熟练,这里就简单总结一下常用的 git 的操作,大致有&#xff1a…...

ISO7320FCQDRQ1数字隔离器LMG1025QDEETQ1半桥GaN驱动器

1、数字隔离器 DGTL ISO 3000VRMS 2CH 8SOIC型号:ISO7320FCQDRQ1批次:新技术:容性耦合类型:通用隔离式电源:无通道数:2输入 - 侧 1/侧 2:2/0通道类型:单向电压 - 隔离:30…...

openmmlab 语义分割算法基础

本文是openmmlab AI实战营的第六次课程的笔记,以下是我比较关注的部分。简要介绍语义分割:如下图,左边原图,右边语义分割图,对每个像数进行分类应用语义分割在个各种场景下都非常重要,特别是在自动驾驶和医…...

2023年深圳/东莞/惠州CPDA数据分析师认证报名入口

CPDA数据分析师认证是中国大数据领域有一定权威度的中高端人才认证,它不仅是中国较早大数据专业技术人才认证、更是中国大数据时代先行者,具有广泛的社会认知度和权威性。 无论是地方政府引进人才、公务员报考、各大企业选聘人才,还是招投标加…...

RabbitMQ-客户端源码之AMQChannel

AMQChannel是一个抽象类,是ChannelN的父类。其中包含唯一的抽象方法: /*** Protected API - called by nextCommand to check possibly handle an incoming Command before it is returned to the caller of nextCommand. If this method* returns true…...

注意力机制(SE,ECA,CBAM) Pytorch代码

注意力机制1 SENet2 ECANet3 CBAM3.1 通道注意力3.2 空间注意力3.3 CBAM4 展示网络层具体信息1 SENet SE注意力机制(Squeeze-and-Excitation Networks):是一种通道类型的注意力机制,就是在通道维度上增加注意力机制,主要内容是是…...

Vue2笔记03 脚手架(项目结构),常用属性配置,ToDoList(本地存储,组件通信)

Vue脚手架 vue-cli 向下兼容可以选择较高版本 初始化 全局安装脚手架 npm install -g vue/cli 创建项目:切换到项目所在目录 vue create xxx 按照指引选择vue版本 创建成功 根据指引依次输入上面指令即可运行项目 也可使用vue ui在界面上完成创建&…...

Java程序的执行顺序、简述对线程池的理解

点个关注,必回关 文章目录一、Java程序是如何执行的二、合理利用线程池能够带来三个好处一、Java程序是如何执行的 我们日常的工作中都使用开发工具(IntelliJ IDEA 或 Eclipse 等)可以很方便的调试程序,或者是通 过打包工具把项目…...

【前言】嵌入式系统简介

随手拍拍💁‍♂️📷 日期: 2022.12.01 地点: 杭州 介绍: 2022.11.30下午两点时,杭州下了一场特别大的雪。隔天的12月路过食堂时,边上的井盖上发现了这个小雪人。此时边上的雪已经融化殆尽,只有这个雪人依旧维持着原状⛄…...

React设计原理—1框架原理

阅读前须知 本文是笔者学习卡颂的《React设计原理》的读书笔记,对书中有价值内容以Q&A方式进行呈现,同时结合了自己的理解🤔阅读时推荐先看问题,想想自己的答案,再和答案比对一下本文属于前端框架科普,…...

(C00034)基于Springboot+html前后端分离技术的宿舍管理系统-有文档

基于Springboothtml技术的宿舍管理系统-有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于Springboothtml的前后端分离技术的宿舍管理系统项目为了方便对学生宿舍进行管理而设计,分为后勤、宿管、学生三种用户,后勤对整体宿舍进行管理、宿管…...

Flink面试题

一 基础篇Flink的执行图有哪几种?分别有什么作用Flink中的执行图一般是可以分为四类,按照生成顺序分别为:StreamGraph-> JobGraph-> ExecutionGraph->物理执行图。1)StreamGraph顾名思义,这里代表的是我们编写…...

Python学习笔记

前言:又从仓库翻出来了一些以前总结的文档,以下内容是我初学Python时网上找的或是图书馆借书抄写的笔记,现在再看有点零散不成体系,但是也还是纪念一下子吧。 Python学习笔记 对于初学编程的人来说,Python可以缩短编…...

最适合入门的100个深度学习实战项目

🚨注意🚨:最近经粉丝反馈,发现有些订阅者将此专栏内容进行二次售卖,特在此声明,本专栏内容仅供学习,不得以任何方式进行售卖,未经作者许可不得对本专栏内容行使发表权、署名权、修改…...

AssertionError: 618 columns passed, passed data had 508 columns【已解决】

问题描述 程序中断,报错如下AssertionError: 618 columns passed, passed data had 508 columns Exception has occurred: ValueError 618 columns passed, passed data had 508 columns AssertionError: 618 columns passed, passed data had 508 columnsThe abo…...

PHP和Node.js哪个更爽?

先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...