计算机系统结构 2:局部性原理
计算机系统结构第二课摘要
文章目录
- 计算机系统结构第二课摘要
- CPU性能公式
- 复杂指令集和精简指令集
- 最短编码:平均访问时间最短
- 无处不在的缓存、局部性原理
CPU性能公式
计算机体系结构,除了研究体系结构层面的抽象和通用性之外,还需要考虑的是“性能”问题。
衡量计算机性能通常有俩个标准:
执行时间(Execution time):(CPU)执行一个程序,需要花多少时间;
吞吐率(Throughput):在一定的时间范围内,(CPU)到底能执行多少指令。
在这两个重要指标下,要提升性能,核心是优化第一个【执行时间】,而执行时间公式如下:
- 执行时间 = 时钟周期数 × 时钟周期时间(时钟频率)
时钟周期时间(简称为主频或者频率),格式如:xxGHz,
比如,上图的是 1.6GHz。
如果是运算,每秒可以运算 1.6 * 10 亿次。
1 GHz = 每秒运算 10 亿次,1.6 GHz 是CPU时钟的频率,那么频率就是 116\frac{1}{16}161 亿秒。
也可以说是指令数,每秒可以执行的简单指令的数量是 1.6G 条,1G 其实就是 10 亿次。
缩短时钟周期时间,最简单的莫过于,换一块好一点的 CPU 或者等摩尔定律来优化。
不过,这个是我们这些软件工程师控制不了的事情。
所以,我们只能把目光看向【时钟周期数】了。
如果能够减少程序需要的 CPU 时钟周期数量,一样能够提升程序性能。
所以呀,【时钟周期数】才是我们提升计算机性能的关键,因此我们再细细的划分一下时钟周期数。
时钟周期数:指令数 × 每条指令的平均时钟周期数(CPI)
指令数很好理解,指令的数量。
每条指令的平均时钟周期数,指令集里面有很多条指令,比如,加法、乘法等,加法肯定比乘法要慢…时间就不同了。
- 执行时间 = 【时钟周期数】 × 时钟周期时间(频率)
转为:
- 执行时间 = 【指令数 × 每条指令的平均时钟周期数】 × 频率
如果我们想要解决性能问题,其实就是要优化这三者:
- 频率:摩尔定律,每年CPU性能提高 60%。
- 每条指令的平均时钟周期数(CPI):CPU设计方面的艺术了,什么流水线技术啥的。
- 指令数:执行程序到底需要多少条指令、用哪些指令,主要是编译器优化。
我们可以把自己想象成一个 CPU,坐在那里写程序。
- 计算机主频就好像是打字速度,打字越快,自然可以多写一点程序。
- CPI 相当于写程序的时候,熟悉各种快捷键,越是打同样的内容,需要敲击键盘的次数就越少。
- 指令数相当于程序设计得够合理,同样的程序要写的代码行数就少。
如果三者皆能实现,自然可以很快地写出一个优秀的程序,“性能”从外面来看就是好的。
复杂指令集和精简指令集
在现实生活中,指令集分为【复杂指令集 CISC】和【精简指令集 RISC】。
比较属性 | CISC | RISC |
---|---|---|
指令系统 | 复杂、可变 | 简单、定长 |
指令数目 | 大于200 | 小于100 |
指令格式 | 大于4 | 小于4 |
寻址方式 | 大于4 | 小于4 |
可访存指令 | 无限制 | 只有LOAD/STORE指令 |
指令使用频率 | 相差很大 | 相差无几 |
指令执行时间 | 相差很大 | 一个周期 |
优化编译 | 难 | 容易 |
程序代码长度 | 短 | 长 |
控制器实现方式 | 微程序 | 硬布线 |
软件系统开发时间 | 短 | 长 |
我们现在用的 windows计算机 都是 CISC,而手机处理器、苹果计算机是 RISC,CPU支持的指令集不同。
在计算机历史的早期,其实没有什么 CISC 和 RISC 之分,所有的 CPU 其实都是 CISC。
1974年,大卫·帕特森(David Patterson)教授[^大卫·帕特森教授写了《计算机组成与设计:硬件 / 软件接口》、《计算机体系结构:量化研究方法》这两本教科书。]证明了,实际在 CPU 运行的程序里,80% 的时间都是在使用 20% 的简单指令。
于是,他就提出了 RISC 的理念,只包含了 20% 的简单、常用的指令。
在 RISC 架构里面,CPU 选择把指令“精简”到 20% 的简单指令。而原先的复杂指令,则通过用简单指令组合起来来实现,让软件来实现硬件的功能。这样,CPU 的整个硬件设计就会变得更简单了,在硬件层面提升性能也会变得更容易了。
RISC 的 CPU 里完成指令的电路变得简单了,于是也就腾出了更多的空间。这个空间,常常被拿来放通用寄存器。因为 RISC 完成同样的功能,执行的指令数量要比 CISC 多,所以,如果需要反复从内存里面读取指令或者数据到寄存器里来,那么很多时间就会花在访问内存上。于是,RISC 架构的 CPU 往往就有更多的通用寄存器。除了寄存器这样的存储空间,RISC 的 CPU 也可以把更多的晶体管,用来实现更好的分支预测等相关功能,进一步去提升 CPU 实际的执行效率。
总的来说,对于 CISC 和 RISC 的对比:
- 执行时间 = 【指令数 × 每条指令的平均时钟周期数】 × 频率
CISC 的架构,其实就是通过优化指令数,来减少 CPU 的执行时间。而 RISC 的架构,其实是在优化 CPI。因为指令比较简单,需要的时钟周期就比较少。因为 RISC 降低了 CPU 硬件的设计和开发难度,所以从 80 年代开始,大部分新的 CPU 都开始采用 RISC 架构。从 IBM 的 PowerPC,到 SUN 的 SPARC,都是 RISC 架构,除了Intel。
虽然 RISC 是很小、好处也极多,但 RISC 意味着 CPU 从硬件或电路层面支持的指令数比较少,这个意味着很多复杂的操作需要执行更多的指令而不是更少的、用 RISC 指令开发软件的时间也会长很多…
最短编码:平均访问时间最短
计算机的底层世界是 0 和 1,而就是因为只有 0 和 1,才可能出现重复和反复加以利用。
信息论里有一个香农大佬的定律(香农第一定律),证明了编码长度理论上有一个最小值。
后来,MIT教授哈夫曼在香农第一定律的基础上,做了进一步的扩展,形成了哈夫曼编码。
哈夫曼编码:将【最短的编码】给出现【概率最大的信息】。这样可以使平均访问时间最短,但必须事前知道每个码出现的频率。
如同密码学家破译羊皮卷上的文字,前提是知道各个字母的频率:
在现实生活中,很多信息的组合,比单独一条信息,其概率分布差异更大,因此对它们使用哈夫曼编码进行信息压缩,压缩比会更高。比如说,在汉语中,如果对汉字的频率进行统计、压缩,一篇文章通常能压缩掉 50% 以上,但是如果按照词进行频率统计,再用哈夫曼编码压缩,可以压缩掉 70% 以上。
精简指令集,取 20% 的指令即可完成 80% 的事情。
- 【最短的编码】/【最宝贵的资源】具象化为【80% 的时间】
- 【概率最大的信息】具象化为【20% 的指令】
在实际生活里,我们能不能提高到最优效率、几倍收益率,主要看哈夫曼思想用的妙不妙!!
如果您哪天追求最短编码,一定要试一试【哈夫曼方法】,发现不同事物之间的共同点,再抽象化或者具象化。
无处不在的缓存、局部性原理
之所以大家认为 RISC 优于 CISC,来自于大卫·帕特森的证明,在实际的程序运行过程中,有 80% 运行的代码用着 20% 的常用指令。
这意味着,CPU 里执行的代码有很强的局部性[^在一段时间内,整个程序的执行仅限于程序中的某一部分],而对于有着很强局部性的问题,常见的一个解决方案就是使用缓存。
局部性分为【时间局部性】和【空间局部性】。
- 时间局部性:如果一个数据被访问了,那么它在短时间内还会被再次访问。
比如说,《斗破苍穹》这本小说,我今天读了一会儿,没读完,明天还会继续读。
- 空间局部性:如果一个数据被访问了,那么和它相邻的数据也很快会被访问。
比如说,我读完了土豆写的《斗破苍穹》之后,感觉这书不错,所以也会看他别的作品。
在实际的计算机日常的开发和应用中,我们对于数据的访问总是会存在一定的局部性。
有时候,这个局部性是时间局部性,就是我们最近访问过的数据还会被反复访问。
有时候,这个局部性是空间局部性,就是我们最近访问过数据附近的数据很快会被访问到。
而局部性的存在,使得我们可以在应用开发中使用缓存这个有利的武器。
假设:
- 内存,0.015MB/元(1MB,0.015人民币)
- 机械式硬盘,0.00004MB/元 (1MB,0.00004人民币)
我们可以利用局部性原理,通过将热点数据加载并保留在速度更快的存储设备里面(如内储存器),我们可以用更低的成本来支撑服务器(如外储存器)。
假设淘宝有 12亿 商品数量,每件商品需要 4MB 的存储空间,那么一共需要 4800TB( => 12 亿 × 4MB)的数据存储。这 12 亿件商品中,不是每一件商品都会被经常访问。
如果只是 1% 的热点数据做为缓存则需要 48TB 的内存 72 万元( => 48TB/1MB × 0.015 元 = 72 万元)
另外还需要 99% 的硬盘 19 万元( => 4752TB/1MB × 0.00004 元 = 19 万元)
这样就利用 缓存+内存+硬盘+磁盘 的访问速度和容量大小,根据局部性原理 ,来设计存储器的层次结构。
这样既享受 CPU Cache 的速度,又享受内存、硬盘巨大的容量和低廉的价格。
在今天,CPU 和内存的访问速度已经有了 120 倍的差距。随着时间的增长,摩尔定律的指数增长下,差距大概还会不断拉大。
CPU 的速度好比风驰电掣的高铁,然而,内存却只能等着旁边腿脚不太灵便的老太太。
为了弥补两者之间的性能差异,我们能真实地把 CPU 的性能提升用起来,而不是让它在那儿空转,我们在现代 CPU 中引入了高速缓存。
从 CPU Cache 被加入到现有的 CPU 里开始,内存中的指令、数据,会被加载到 L1-L3 Cache 中,而不是直接由 CPU 访问内存去拿。在 95% 的情况下,CPU 都只需要访问 L1-L3 Cache,从里面读取指令和数据,而无需访问内存。
计算机不仅 CPU 里有缓存(Cache、TLB 让CPU更高效),
- 操作系统的缓存:页缓存、slab,让系统更高效
- 应用层的缓存:内存管理、IO应用缓存、让应用更高效
Cache 是现代的计算机特色,它是利用了一个算法思想:「空间换时间」。以小空间换取更快运算速度,那么我们再设计算法时,就需要考虑缓存进来。
计算机的解决方案通常是一个系统性的优化问题,单纯一部分的改进可能会引起另一个部分的问题。
我们的大脑就像计算机的CPU,不受时间、空间的限制,而身体、心灵却不行,如果把大脑当成了自己,大脑就在一种全能模式下运作(也可以简单理解为“自恋”)。
在这种全能模式下,大脑会把自己当成主人,身体和心灵都被ta看成了下属。。。。。。这时强迫身体和心灵做一些ta们不愿意的事情,身体、心灵会选择拖延、懒惰,大脑就会暴怒,您也会随之暴怒…
这个想法是否知道可行,我想,您得加一个【缓存】,凡事留点余地,凡事不要太较真。
缓存,说起来简单,做起来不容易。
最后,我送给您一个有用的操作方法,叫:巴菲特内控法。
巴菲特说自己如果不在一张纸上写下自己的理由,就绝不交易。这个交易可能是错的,但自己必须有一个“交易答案”。
比方说,在纸上写:“我今天要花 500 亿美金来买苹果公司,因为……”
如果不能回答这个问题,就不要买。
写在纸上能有什么用呢?
其实,就是建立了一个缓存,人为制造了一个“缓存点”,防止爱欺骗自己的大脑过于冲动。
复盘:
文章目录
- 计算机系统结构第二课摘要
- CPU性能公式
- 复杂指令集和精简指令集
- 最短编码:平均访问时间最短
- 无处不在的缓存、局部性原理
计算机系统结构 2:局部性原理相关推荐
- 深入浅出计算机组成原理学习笔记:局部性原理-数据库性能跟不上,加个缓存就好了(第36讲)...
平时进行服务端软件开发的时候,我们通常会把数据存储在数据库里.而服务端系统遇到的第一个性能瓶颈,往往就发生在访问数据库的时候. 这个时候,大部分工程师和架构师会拿出一种叫作"缓存" ...
- (计算机组成原理)第三章存储系统-第六节1:高速缓冲存储器Cache及其相关基本概念、程序访问的局部性原理和命中率
文章目录 一:Cache的基本原理 二:程序访问的局部性原理 三:主存块 四:命中率和缺失率 由于程序的转移概率不会很低,且数据分布的离散性较大,所以单纯依靠并行主存系统提高主存系统的频宽是有限的.这 ...
- 微机计算机系统结构原理,计算机系统组成及工作原理题目
计算机系统组成及工作原理计算机系统组成及工作原理 1 计算机系统一般有 硬件 和 软件 两大系统组成 2 微型计算机系统结构由运算器 控制器 存储器 输入设备 输出设备五大部分组成 3 微型计算机的运 ...
- 【计算机操作系统-内存管理】局部性原理是什么?
要想更好地理解虚拟内存技术,必须要了解计算机中著名的局部性原理. 早在1968年的时候,就有人指出我们的程序在执行的时候往往呈现局部性规律,也就是说在某个较短的时间段内,程序执行局限于某一小部分,程序 ...
- 计算机控制点火系的工作过程,计算机控制点火系统结构与工作原理.doc
计算机控制点火系统结构与工作原理 [ 第三章 计算机控制点火系统结构与工作原理 ] 一.?填空题 1 . 在传统的汽油机点火系中,断电器触点的开闭是由 __________________ 来控制的. ...
- 处理机调度实验总结_计算机系统结构总结
系统结构总论 总目标:快 总原理:加快经常性事件 量化原理:Amdahl定理 Amdahl定理指出加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统总时间的百分比. 加速比 = ...
- 计算机组成与系统结构名词解释,北京邮电大学 计算机系统结构(体系结构) 期末复习 术语解释...
北邮 体系结构 期末复习 简答题(名词解释) 1. 计算机系统结构:机器语言程序员所看到的传统机器级所具有的属性,它包括概念性结构和功能特性两个方面. 2. 计算机组成:指的是计算机系统结构的逻辑实现 ...
- 计算机系统结构——概述
计算机的实现包括两个方面:组成和硬件.组成一词包含了计算机设计的高阶内容,例如存储器系统,存储器互连,设计内部处理器 CPU (中央处理器--算术.逻辑.分支和数据传送功能都在内部实现).有时也用微体 ...
- 计算机系统结构 期末复习
一.名词解释 虚拟机:指通过软件模拟具有完整硬件系统功能的,运行在一个完全隔离环境中的完整计算机系统 系统加速比:同一个任务在系统改进前花费总时间和在系统改进后花费总时间的比率 Amdahl定律:计算 ...
最新文章
- Unity导出apk出现的问题,JDK,Android SDK,NDK,无“安装模块”
- 推荐一些常用感觉不错的jQuery插件
- 【JavaSE04】Java中循环语句for,while,do···while
- Spring xml 配置使用外部config 文件
- powerdns mysql_安装PowerDNS(使用MySQL后端)和Poweradmin在Debian Lenny
- java未检查异常_Java中已检查和未检查的异常
- C语言重难点:内存对齐和位段
- 最小生成树 洛谷P3366【模板】最小生成树 洛谷P2820 局域网
- 【CVTE Web后台开发实习生 线下面试】总结
- spring boot demo( 获取一个RESTful web service)
- 在ASP.NET 中实现单点登录(利用Cache, 将用户信息保存在服务器缓存中)
- 使用Shell工具连接虚拟机
- winform小程序-随机抽奖软件
- Excel:计数相关的函数
- 下载iconfont图标
- JMeter教程1 - 介绍环境搭建 (Mac)插件安装
- mac 不用虚拟机 租用云服务器,mac 不用虚拟机 租用云服务器
- python彩票分析_128期老铁大乐透预测奖号:大中小码分析
- 《计算机网络:自顶向下方法》学习笔记——第六章:链路层
- Linux拷贝命令cp的用法
热门文章
- 在win10中安装caffe并配置MATLAB和Python接口(支持GPU加速)
- 计算机专业的学生注意IT 培训的7 大陷阱
- Java jdk源代码的Math包
- css编程设置网页背景,网页中cssbackground背景图和背景颜色的设置方法
- 坚果Pro2识别网页链接问题
- ICCV2019——SCRDet Towards More Robust Detection for Small, Cluttered and Rotated Objects
- Online Generation of Collision-Free Trajectories for Quadrotor Flight in Unknown Cluttered Environme
- 工业锅炉远程监控平台_工业物联网解决方案案例
- 电压源和电流源的区别
- VPX-M1 3U VPX 刀片计算机产品