计算机组成与设计Patterson Hennessy 笔记_1 计算机概要与技术

news2024/11/13 15:17:25

Patterson & Hennessy

计算机概要与技术

计算机应用包括:个人计算机PC,服务器,嵌入式计算机。后PC时代出现了个人移动设备PMD(手机),云计算(在网络上提供服务的大服务器集群,供应商按需出租其中的部分服务器)。

学习计算机组成设计,最根本的目的就是两个字——性能。想让网页加载快一些,游戏延迟低一些,存储大一些……现在的计算机系统想要提高性能主要是往“并行处理”和内存的层次性方向发展。后续章节会分别从数据,指令,存储等方面的优化展开。

计算机系统结构中的8大伟大思想

摩尔定律

芯片上的集成度18个月翻一番。近年来有些不适用了,想要优化

不能只等着存储空间的上升了,ISA可以从“专注于特定领域”入手比如专于机器学习。

抽象

高层次看不到低层次的具体实现,以此简化设计。

加速大概率事件

大概率事件往往也因为简单所以容易发生,因此也易于提高效率,而且提高其效率的收益也大。

通过并行提高性能

本书中会多次提到~

通过流水线提高性能

典型的那个阶梯状流水线模型。不是每个任务cpu都先取指解码执行取指解码执行一遍遍单独执行的,而是可以在解码时取下一个,执行时解码下一个……

通过预测提高性能

提前开始某些预测的操作。

存储器层次

速度快,容量大,价格便宜这些是存储器的互斥属性,但是我们又全都想要。解决办法就是类似那个金字塔模型的存储器层次,用于处理不同的数据。

通过冗余提高可靠性

类似汽车后面的备胎,多余物理部件用于确保意外发生时可以取代并检测错误。

软件 硬件

软件主要是系统软件,应用软件,系统软件作为应用和底层硬件的桥梁,这也是一种抽象。

系统软件中 os 和编译程序是必需的。编译程序主要用于把高级语言翻译为底层机器语言,os 负责处理 io,分配存储空间,管理共享资源。

机器语言,汇编语言,高级语言这些也不再过多介绍了。硬件主要包括冯诺依曼的五大结构。

而最伟大的抽象就是指令集体系架构,也就是硬件和底层软件之间的接口。他封装了一些底层 IO,存储器分配等系统细节,为程序员提供基本指令集或 OS 的接口。这些接口合称为 ABI Application Binary Interface。

存储设备按照数据安全性来讲主要分为易失性 volatile 和非易失性 non-volatile 两种。主存储器是易失的(内存包括主存和主存中取出来的告诉缓存。DRAM 是一种主存),二级存储器(比如硬盘)是非易失的。flash 闪存是一种非易失的内存,存取速度和价格都介于两者之间。

img

通信

联网计算机的3大特点:

  • 通信,数据交流。发个文件啥的。
  • 资源共享:比如 IO 设备可以共享,远程打印,显示之类。
  • 远距离访问:远程控制,不用必须在计算机前。

按距离划分主要分为广域网(如以太网)和局域网。现在还在不断发展比如诞生了新的无线通信技术(IEEE 802.11 标准)。

处理器和存储器制造技术

image-20230622165505108

芯片是由集成晶体管组成,由硅制造而来。上图介绍了整体流程步骤。

在 RISCV Reader 里有提到类似的原理,如果缩小了芯片体积,晶圆上的瑕疵会影响更少的芯核,晶圆的利用率也会更高,产率数量也多了。而且生产芯片的掩膜很贵,产量高了平均每个芯片掩膜成本就低了。

性能

几个重要度量参数:响应时间(收到任务到完成任务的时间,PC 用户较关注),吞吐率(单位时间完成的任务数量,数据中心通常关注)。

两者是相互影响的,比如响应时间低了吞吐率也低,任务太多排队响应时间也会低,提高吞吐率在这种情况下也会提高响应时间。

本书前几章性能主要取决于响应时间,也就是成反比。比如运行程序需要10s和10s的两台计算机,前者比后者快1.5倍。

CPU执行时间=用户CPU时间(执行程序)+系统CPU时间(操作系统为了执行程序花费的时间)

CPU时钟周期=计算机一个时钟周期的时间,这是计算机底层的一种度量方式。

一个程序执行时间=所需CPU周期数*CPU时钟周期。因此提高CPU时钟频率也可以加快程序执行速度。

CPI 执行每条指令所需的时钟周期数,标识了指令的性能。

因此CPU执行程序时间=指令条数 * CPI * 时钟周期

不过三者是有关联的,尽量不要取其中一部分去预测确定的性能结果。

比如 MIPS:指令数/执行时间 * 10^-6 或者 时钟频率/CPI * 10^-6,代表每秒执行几百万条指令。但是这个参数没法直接拿去衡量性能,比如不同计算机指令集条数不一样,同一计算机不同程序 MIPS 值不一样……

image-20230622231429948

下例A的 MIPS 更高,但是B更快。

能耗和功耗

功耗:单位时间消耗多少能量。

能耗:能效比,比如完成某个任务消耗的能量。

单纯功耗低不一定能耗低,因此能耗比功耗更有价值。

目前占统治地位的集成电路技术是 CMOS,能耗主要取决于晶体管开关的动态能耗。一次翻转的能耗=负载电容 * 电压^2. 晶体管功耗=动态能耗 * 开关频率。

随着时钟频率增长功耗也逐渐增加,近年来功耗达到了临界的“功耗墙”,即功耗增加造成的升温快到承受极限了。当然我们也可以采取冷却办法,但是成本很高,因此不能再一味提高时钟频率了,要寻找新方法。也就是单处理器向多处理器的转变(2000年前后开始的)。

多处理器

虽然处理器核心数量增加了,但是因此程序也需要重新编写来适配多核。我们要让大家的分配平衡,同时不要有太多通信和同步的开销。

本章示例:SPEC CPU基准测试程序

SPEC 是诸多计算机销售商资助的,用于建立基准测试集的合作组织。比如 SPEC CPU 2006 包括12个整数基准程序集,17个浮点基准程序集,其中包含C编译、仿真量子计算机、分子动力学质点法等程序。除此之外还有能耗功耗测试集。

结果被称为 SPECratio,值越大表示性能越快(执行时间的倒数)。综合几何平均值是所有 SPECratio 相乘,开n次方根。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity Mac最新打苹果包流程

作者介绍:铸梦xy。IT公司技术合伙人,IT高级讲师,资深Unity架构师,铸梦之路系列课程创始人。 IOS详细打包流程1.申请APPID2.申请开发证书3.创建描述文件 IOS详细打包流程 1.申请AppID 2.创建证书 3.申请配置文件(又名描…

NodeJS KOA⑩②

文章目录 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘前言KOA Koa vs Express Koa更轻量 Koa~Context对象 Koa~异步流程控制 Koa~中间件模型Koa路由 1.1基本使用 2.2请求方式2.2.1规范写法2…

数据结构——带头节点的双向循环列表

带头节点的双向循环链表是一种特殊的双向链表,它与普通的双向链表相比,最大的区别是链表头结点的 next 指针不再指向第一个实际节点,而是指向链表中的第一个节点。同时,链表尾结点的 prev 指针也不再指向 NULL,而是指向…

轻松配置深度学习模型 ?

动动发财的小手,点个赞吧! 由于所有模块都需要大量参数和设置,因此管理深度学习模型可能很困难。训练模块可能需要诸如 batch_size 或 num_epochs 之类的参数或学习率调度程序的参数。同样,数据预处理模块可能需要 train_test_spl…

Java接口幂等性,如何重试?

Java接口幂等性,如何重试? 文章目录 Java接口幂等性,如何重试?前言一、幂等性是什么?二、为什么要幂等性?三、使用什么办法实现幂等性?1.insert前先select2.加悲观锁3.加乐观锁4.加唯一索引5.Re…

uniapp系列-uni.getAppBaseInfo() versionCode appVersion 值不对应该怎么解决?

今天看到一个BUG 问题描述 我们使用uniapp的官方文档中uni.getAppBaseInfo()后获取的 appVersionCode appVersion ,发现获得的结果和我们实际设置的不一致,不是manifest.json里面的值,如下图所示官方文档:https://uniapp.dcloud…

还原大师(MD5)

根据题目提示,都猜得到这应该跟MD5的加密形式有关系 我好像还没有具体了解过MD5编码的格式,或许本题可以通过MD5的编码格式推导出字符串 但是说实话,MD5的加密方式没有找到详细简介的文章 然后我就去网上百度了一下,经过大佬wp的洗…

java springboot整合MyBatis演示增删查改操作

前面我的文章 java springboot整合MyBatis做数据库查询操作讲述了整合springboot整合MyBatis 做了根据id查询的语句 那么 我们现在按它搭建的项目继续 我们在staffDao中添加一个insert函数 参考代码如下 Insert("insert into staff(name, age, status, departmentid) va…

chatgpt赋能python:Python编程实现1+22+333,解密方法

Python编程实现122333,解密方法 在Python编程开发中,我们经常需要求解不同类型的算数表达式,其中求解一系列类似122333的表达式是一个比较常见的需求。本文将会介绍如何使用Python语言方便地求解这类表达式,为大家提供一种针对此…

Redis中AOF和RDB

在Redis的持久化中,常使用的两个手段便是AOF和RDB进行持久化。 RDB(Redis DataBase)是Redis的持久化方式之一,在配置文件中,我们可以找到 对Redis进行持久化配置,而RDB在持久化时是怎么样进行工作的呢&…

ARM、ARM架构、ARM架构芯片

ARM是一种基于精简指令集(RISC)的处理器架构,它由英国的ARM公司设计和授权。 ARM芯片具有低功耗、高性能、高集成度等特点,广泛应用于嵌入式系统、移动设备、物联网、服务器等领域。本文将介绍ARM的各类芯片,包括其特…

Java-API简析_java.lang.ClassLoader类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131345825 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

CentOS 7.9 安装 Jenkins

CentOS 7.9 安装 Jenkins 文章目录 CentOS 7.9 安装 Jenkins一、概述二、安装1、安装 OpenJDK2、安装 Jenkins3、启动 Jenkins4、给 Jenkins 放行端口 三、初始化 Jenkins 配置1、访问2、解锁 Jenkins3、配置清华大学的源地址4、安装插件5、创建管理员用户6、完成安装 四、功能…

TypeScript ~ TS 掌握自动编译命令 ③

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

锐捷睿易:云端绑定别人账号,命令方式解绑

一、适用场景 云端绑定了别人的账号,但又不能让他解绑,只能自己解绑从新绑定自己MACC 前提:需要设备联网状态才可以解绑 二、配置步骤 1、登录macc,首页点击设备解绑 2、输入收集的设备序列号,点击获取专属URL&…

chatgpt赋能python:Python清空console的方法

Python清空console的方法 随着Python的应用越来越广泛,我们经常会遇到需要清空Python console的情况。比如,我们可能需要重新开始一段代码的执行,或者想要隐藏过去的交互记录。在这篇文章中,我们将介绍几种方法来清空Python cons…

安装配置nvm-windows对Node.js与npm进行版本控制

一、nvm 由于Node.js版本原因,可能会出现一些错误,如IDEA中Node.js环境下npm报错Error:0308010C:digital envelope routines:unsupported。而且不同的项目,所采用的Node.js的版本不同,重新卸载安装配置,太过繁琐。所以…

chatgpt赋能python:Python求加速度:从计算机视觉到自动驾驶

Python求加速度:从计算机视觉到自动驾驶 在计算机视觉、自动驾驶和机器人等领域,求加速度是常见的任务。Python是一种强大的编程语言,可以用于快速、简便地求解加速度。本篇文章将介绍如何在Python中求解加速度,并探讨加速度在实…

【无标题】很有趣的一个个CSS小球下落动画

代码如下 <!-- 两个div --> <div class"ball"></div> <div class"ground"></div>.ball {width: 30px;height: 30px;background-color: black;border-radius: 50%;position: relative;left: 90px;animation: failing 0.5s ea…

leetcode64. 最小路径和(动态规划-java)

最小路径和 leetcode64. 最小路径和题目描述 暴力递归 缓存代码演示 动态规划代码演示空间压缩代码演示 动态规划专题 leetcode64. 最小路径和 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/minimum-path-sum 题目描…