深入理解计算机系统 第六章 存储器层次结构

为什么要学习存储器的层次结构?

如果我们理解了系统是如何将数据在存储器层次结构中上上下下移动的,那么我们就可以编写自己的应用程序,使得它们的数据项存储在层次结构较高的地方,在那里 CPU 能更快地访问到它们。

局部性原理

计算机程序倾向于引用临近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。这种倾向性,被称为局部性原理。

有良好局部性的程序比局部性差的程序运行地更快。且在现代计算机系统的各个层次,从硬件到操作系统、再到应用程序,它们的设计都利用了局部性。

缓存相关术语介绍

缓存命中

当程序需要第 k+1 层的某个数据对象 d 时,他首先在当前存储在第 k 层的一个块中查找 d。如果 d 刚好缓存在第 k 层中,那么就是我们所说的缓存命中。

缓存不命中

相对于缓存命中,如果第 k 层中没有缓存数据对象 d,那么就是我们所说的缓存不命中。

缓存不命中的种类

区分不同种类的缓存不命中有时候是很有帮助的。如果第 k 层的缓存是空的,那么对任何数据对象的访问都会不命中。一个空的缓存有时被称为冷缓存,此类不命中称为强制性不命中冷不命中

由于发生不命中的情况是很正常的,所以在不命中发生的时候,必须有对应的放置策略。而如果采用最灵活的方式(即允许第 k+1 层的任何块放在第 k 层的任何块中),成本会比较高,因为随机地放置块,定位起来代价很高。因此,实际情况中,被使用的通常是更为严格的放置策略,即使第 k+1 层的块对第 k 层的块有一种“多对一”的映射关系(第 k+1 层的某几个块只能映射到第 k 层的某一个块中),这就会导致一种由放置策略引起的不命中,我们称之为冲突不命中

要编写缓存友好的代码,需要遵从以下两点原则:

1、让最常见的情况运行的快。程序通常把大部分时间都花在少量的核心函数上,而这些函数通常把大部分时间都花在了少量循环上。所以要把注意力集中在核心函数里的循环上,而忽略其他部分。

2、尽量减小每个循环内部的缓存不命中数量。在其他条件相同的情况下,不命中率较低的循环运行得更快。

原文地址:https://www.cnblogs.com/stone94/p/10056104.html

时间: 2024-08-06 07:10:41

深入理解计算机系统 第六章 存储器层次结构的相关文章

[CSAPP笔记][第六章存储器层次结构]

第六章 存储器层次结构 在简单模型中,存储器系统是一个线性的字节数组,CPU能够在一个常数访问每个存储器位置. 虽然是一个行之有效的模型,但没有反应现代系统实际工作方式. 实际上,存储器系统(memory system)是一个具有不同容量,成本和访问时间的存储设备的层次结构. CPU寄存器保存着最常用的数据.(0周期) 靠近CPU的小的,快速的高速缓存存储器(cache memory)作为一部分存储在相对慢速的主储存器(main memory,简称主存)中的数据和指令的缓冲区.(1~30周期)

第六章存储器层次结构 学习报告

第六章 存储器层次结构 在简单模型中,存储器系统是一个线性的字节数组,而CPU能够在一个常数时间内访问每个存储器位置. 实际上,存储器系统是一个具有不同容量.成本和访问时间的存储设备的层次结构.CPU寄存器保存着最常用的数据.靠近CPU的小的.快速的高度缓存存储器作为一部分存储在相对慢速的主存储器中的数据和指令的缓冲区域.       存储器层次结构是可行的. 6.1  存储技术 6.1.1 随机访问存储器 随机反问存储器分为两类:静态的(SRAM)和动态的(DRAM). 1.静态RAM SRA

深入理解计算机系统——第六章

存储器 磁盘 磁盘可以存储大量的数据,但是速度慢 磁盘由盘片组成,每个盘片有两面,上面覆盖着磁性记录材料,盘片中央有一个可以旋转的主轴 原文地址:https://www.cnblogs.com/ifannie/p/10058181.html

第6章 存储器层次结构

第6章 存储器层次结构 18 Dec 2017 -- The Memory Hierarchy 6.1 Storage Technologies 5816.2 Locality 6046.3 The memory hirarchy 6096.4 cache memories 6146.5 writing Cache-friendly code 6336.6 putting it together: The impact of caches on program performance 6396.

深入理解计算机系统,第一章:漫游

计算机系统漫游 1.1 信息就是位+上下文 先看一个简单的Hello World C程序. 1 #include <stdio.h> 2 3 void main() 4 { 5 printf("Hello World!\n"); 6 } 这个程序的源文件是文本格式,以字节序列的方式存储在文件中,由一种叫ASCII码的方式编码.除了文本文件之外的其它文件都是二进制文件. 由HelloWorld程序的存储方式可以猜测,信息,包括磁盘文件.内存中运行的程序.内存中储存的用户数据以

深入理解计算机系统(序章)------谈程序员为什么要懂底层计算机结构

万丈高楼平地起,计算机系统就像程序员金字塔的地基.理解了计算机系统的构造原理,在写程序的道路上才能越走越远.道理LZ很早就懂了,可是一直没下定决心好好钻研,或许是觉得日常工作中根本用不到这些,又或许是每次拿起书看到那些复杂的底层架构,看到存储器,寄存器,CPU,总线等等这些概念就头大.总之,由于各种各样的原因,对这块的知识一直没有认真花时间去钻研.那么你可能会问,那你写这篇博客的题目不就是准备学习这方面的知识吗?是的,LZ 准备下定决心钻研了,至于原因如下: ①.经常用一些不知其所以然的技术,会

《深入理解计算机系统》第一章计算机系统漫游

信息就是位+上下文 系统中所有信息都是由一串位表示的.区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文. 程序被其他程序翻译成不同的格式     范例代码 1 #include <stdio.h> 2 3 4 5 int main() 6 7 { 8 9 printf("hello world\n"); 10 11 } 每条C语言都必须被其他程序转化为机器指令,以可执行目标程序的格式打包好,以二进制文件形式存放 转化过程分为: 预处理阶段:读取系统头文件stdio

深入理解Magento – 第六章 – 高级Magento模型(转)

深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第六章 – 高级Magento模型 我们讲过Magento有两种模型,简单模型和EAV(Entity Attribute Value)模型.上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract / Varien_Object.简单模型和EAV模型的区别在于资源模型(Model Resource).虽然所有的资源模型都最终继承“Mage_Core_Model_Resro

《深入理解计算机系统》第二章习题2_66

最近打算把<深入理解计算机系统>再读一遍,说实话这本书读多少遍都不嫌多,每读一遍都会有收获.这次决心把书中的习题整个过一遍,并把其中我认为比较典型的.有意思的写城博文记录一下,恩,这就是这篇博文的由来.恳请各路大神拍砖. 一. 问题描述(鉴于我这不忍直视的翻译水平,我就直接贴书中的问题描述了): Generate mask indicating leftmost 1 in x. Assume w = 32. For example 0xFF00 -> 0x8000, and 0x6600