Appendix B Review of Memory Hierarchy

本附录是对内存层次结构的快速复习,包括缓存和虚拟内存、性能方程和简单的优化。 这第一部分回顾了以下 36 个术语:
如果此评论进行得太快,您可能需要查看计算机组织和设计中的第 7 章,这是我们为经验较少的读者编写的。

缓存是地址离开处理器后所遇到的最高或第一级内存层次结构的名称。 因为局部性原则适用于许多级别,并且利用局部性来提高性能很流行,所以现在只要使用缓冲来重用常见的项目,就会应用术语缓存。 示例包括文件缓存、名称缓存等。

当处理器在缓存中找到请求的数据项时,称为缓存命中。 当处理器在缓存中找不到它需要的数据项时,就会发生缓存未命中。 包含所请求字的固定大小的数据集合,称为块或行运行,从主存储器中检索并放入缓存中。时间局部性告诉我们,在不久的将来我们可能会再次需要这个词,因此将它放在可以快速访问的缓存中很有用。由于空间局部性,很可能很快就会需要块中的其他数据。

缓存未命中所需的时间取决于内存的延迟和带宽。 延迟决定了检索块第一个字的时间,带宽决定了检索该块其余部分的时间。缓存未命中由硬件处理并导致使用有序执行的处理器暂停或停止,直到数据可用。 对于乱序执行,使用结果的指令仍必须等待,但其他指令可能会在未命中期间继续执行。

同样,并非程序引用的所有对象都需要驻留在主内存中。 虚拟内存意味着一些对象可能驻留在磁盘上。 地址空间通常分为固定大小的块,称为页。 在任何时候,每个页面都驻留在主内存或磁盘上。 当处理器引用缓存或主内存中不存在的页面中的项目时,会发生 palt,整个页面从磁盘移动到主内存。 因为页面错误需要很长时间,所以它们在软件中处理并且处理器不会停止。 当磁盘访问发生时,处理器通常会切换到其他一些任务。 从高层次的角度来看,对引用局部性的依赖以及缓存与主内存的大小和相对成本的相对关系与主内存与磁盘的相关性相似。
图 B.1 显示了从高端台式机到低端服务器的计算机的内存层次结构中每个级别的大小范围和访问时间。

Cache Performance Review

由于较小内存的局部性和更高的速度,内存层次结构可以显着提高性能。 评估缓存性能的一种方法是扩展第 1 章中的处理器执行时间方程。我们现在考虑处理器停滞等待内存访问的周期数,我们称之为内存停滞周期。 性能是时钟周期时间与处理器周期和内存停顿周期之和的乘积:

此等式假设 CPU 时钟周期包括处理高速缓存命中的时间,并且处理器在高速缓存未命中期间停顿。 B.2 节重新审视了这个简化的假设。

内存停顿周期数取决于未命中数和每次未命中的成本,称为未命中惩罚:

最后一种形式的优点是可以轻松测量组件。 我们已经知道如何测量指令数 (IC)。 (对于推测处理器,我们只计算提交的指令。)可以用同样的方式测量每条指令的内存引用数; 每条指令都需要指令访问,并且很容易决定它是否也需要数据访问。

请注意,我们将未命中惩罚计算为平均值,但我们将在此处使用它,就好像它是一个常数一样。 由于先前的内存请求或内存刷新,缓存后面的内存可能在未命中时很忙。 处理器、总线和存储器的不同时钟之间的接口处的时钟周期数也不同。 因此,请记住,使用单个数字进行未命中惩罚是一种简化。

组件未命中率只是导致未命中的缓存访问的分数(即未命中的访问次数除以访问次数)。 可以使用高速缓存模拟器测量未命中率,该模拟器获取指令和数据引用的地址跟踪,模拟高速缓存行为以确定哪些引用命中和哪些未命中,然后报告命中和未命中总数。 今天许多微处理器提供硬件来计算未命中和内存引用的数量,这是一种更容易和更快的测量未命中率的方法。

前面的公式是一个近似值,因为读取和写入的未命中率和未命中惩罚通常不同。 然后可以根据每条指令的内存访问次数、读取和写入的未命中惩罚(以时钟周期为单位)以及读取和写入的未命中率来定义内存停顿时钟周期:

我们通常通过组合读取和写入并找到读取和写入的平均未命中率和未命中惩罚来简化完整公式:

未命中率是缓存设计最重要的衡量标准之一,但正如我们将在后面的部分中看到的,它不是唯一的衡量标准。

一些设计人员更喜欢将未命中率测量为每条指令的未命中数,而不是每个内存引用的未命中数。 这两个是相关的:

当您知道每条指令的平均内存访问次数时,后一个公式很有用,因为它允许您将未命中率转换为每条指令的未命中,反之亦然。 例如,我们可以将前面示例中的每个内存引用的未命中率转换为每条指令的未命中率:

顺便说一下,每条指令未命中通常报告为每 1000 条指令未命中,以显示整数而不是分数。 因此,前面的答案也可以表示为每 1000 条指令 30 次未命中。

每条指令未命中的优点是它独立于硬件实现。 例如,推测处理器获取的指令数量大约是实际提交的指令数量的两倍,如果以每个内存引用而不是每个指令的未命中来衡量,这可以人为地降低未命中率。 缺点是每条指令的缺失取决于体系结构; 例如,对于 80x86 与 RISC V,每条指令的平均内存访问次数可能会有很大不同。 因此,每条指令的未命中在使用单个计算机系列的架构师中最为流行,尽管 RISC 架构的相似性允许人们和其他人对比。

Four Memory Hierarchy Questions

热门文章

暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法,在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较,从而确定目标数是在中间数的左边还是右边,将查…
暂无图片
编程学习 ·

GMX 命令分类列表

建模和计算操作命令: 1.1 . 创建拓扑与坐标文件 gmx editconf - 编辑模拟盒子以及写入子组(subgroups) gmx protonate - 结构质子化 gmx x2top - 根据坐标生成原始拓扑文件 gmx solvate - 体系溶剂化 gmx insert-molecules - 将分子插入已有空位 gmx genconf - 增加…
暂无图片
编程学习 ·

一文高效回顾研究生课程《数值分析》重点

数值分析这门课的本质就是用离散的已知点去估计整体,就是由黑盒子产生的结果去估计这个黑盒子。在数学里这个黑盒子就是一个函数嘛,这门课会介绍许多方法去利用离散点最大化地逼近这个函数,甚至它的导数、积分,甚至微分方程的解。…
暂无图片
编程学习 ·

在职阿里5年,一个28岁女软测工程师的心声

简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) ​ 编辑切换为居中…
暂无图片
编程学习 ·

字符串左旋c语言

目录 题目: 解题思路: 第一步: 第二步: 第三步: 总代码: 题目: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符…
暂无图片
编程学习 ·

设计模式--观察者模式笔记

模式的定义与特点 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式&#xf…
暂无图片
编程学习 ·

睡觉突然身体动不了,什么是睡眠痽痪症

很多朋友可能有这样的体验,睡觉过程中突然意识清醒,身体却动弹不了。这时候感觉非常恐怖,希望旁边有一个人推自己一下。阳光以前也经常会碰到这样的情况,一年有一百多次,那时候很害怕晚上到来,睡觉了就会出…
暂无图片
编程学习 ·

深入理解C++智能指针——浅析MSVC源码

文章目录unique_ptrshared_ptr 与 weak_ptrstd::bad_weak_ptr 异常std::enable_shared_from_thisunique_ptr unique_ptr 是一个只移型别(move-only type,只移型别还有std::mutex等)。 结合一下工厂模式,看看其基本用法&#xff…
暂无图片
编程学习 ·

@TableField(exist = false)

TableField(exist false) //申明此字段不在数据库存在,但代码中需要用到它,通知Mybatis-plus在做写库操作是忽略它。,.
暂无图片
编程学习 ·

Java Web day15

第十二章文件上传和下载 一、如何实现文件上传 要实现Web开发中的文件上传功能,通常需要完成两步操作:一.是在Web页面中添加上传输入项;二是在Servlet中读取上传文件的数据,并保存到本地硬盘中。 需要使用一个Apache组织提供一个…
暂无图片
编程学习 ·

【51nod 2478】【单调栈】【前缀和】小b接水

小b接水题目解题思路Code51nod 2478 小b接水 题目 输入样例 12 0 1 0 2 1 0 1 3 2 1 2 1输出样例 6解题思路 可以发现最后能拦住水的都是向两边递减高度(?) 不管两个高积木之间的的积木是怎样乱七八糟的高度,最后能用来装水的…
暂无图片
编程学习 ·

花了大半天写了一个UVC扩展单元调试工具

基于DIRECTSHOW 实现的,用的是MFC VS2019. 详见:http://www.usbzh.com/article/detail-761.html 获取方法 加QQ群:952873936,然后在群文件\USB调试工具&测试软件\UVCXU-V1.0(UVC扩展单元调试工具-USB中文网官方版).exe USB中文网 USB中文…
暂无图片
编程学习 ·

贪心(一):区间问题、Huffman树

区间问题 例题一:区间选点 给定 N 个闭区间 [ai,bi]请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 N,表示区间数。 接下来 …
暂无图片
编程学习 ·

C语言练习实例——费氏数列

目录 题目 解法 输出结果 题目 Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子…
暂无图片
编程学习 ·

Android开发(2): Android 资源

个人笔记整理 Android 资源 Android中的资源,一般分为两类: 系统内置资源:Android SDK中所提供的已经定义好的资源,用户可以直接拿来使用。 用户自定义资源:用户自己定义或引入的,只适用于当前应用的资源…
暂无图片
编程学习 ·

零基础如何在短时间内拿到算法offer

​算法工程师是利用算法处理事物的职业 算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 如果一个算法有缺陷,或不适合于某个问题,执…
暂无图片
编程学习 ·

人工智能:知识图谱实战总结

人工智能python,NLP,知识图谱,机器学习,深度学习人工智能:知识图谱实战前言一、实体建模工具Protegepython,NLP,知识图谱,机器学习,深度学习 人工智能:知识图…
暂无图片
编程学习 ·

【无标题】

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…