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

HNU计算机体系结构-实验3:多cache一致性算法

文章目录

  • 实验3 多cache一致性算法
    • 一、实验目的
    • 二、实验说明
    • 三 实验内容
      • 1、cache一致性算法-监听法模拟
      • 2、cache一致性算法-目录法模拟
    • 四、思考题
    • 五、实验总结

实验3 多cache一致性算法

一、实验目的

熟悉cache一致性模拟器(监听法和目录法)的使用,并且理解监听法和目录法的基本思想,加深对多cache一致性的理解。

做到给出指定的读写序列,可以模拟出读写过程中发生的替换、换出等操作,同时模拟出cache块的无效、共享和独占态的相互切换。

二、实验说明

学习cache一致性监听法和目录法,并且进行一致性算法的模拟实验,同时熟悉相关知识。

三 实验内容

1、cache一致性算法-监听法模拟

1) 利用监听法模拟器进行下述操作,并填写下表

以下 I 表示无效, S表示共享, E表示独占。模拟器采用不优化设置.

所进行的访问是否发生了替换?是否发生了写回?监听协议进行的操作与块状态改变
CPU A 读第5块替换 Cache A的块1CPU A读不命中, Cache A发出BusRd信号, 存储器第5块经Bus传送到Cache A第1块, Cache A第1块状态从I变成S
CPU B 读第5块替换Cache B的块1CPU B读不命中, Cache B发出BusRd信号, 存储器第5块经Bus传送到Cache B第1块, Cache B第1块状态从I变成S
CPU C 读第5块替换Cache C的块1CPU C读不命中, Cache C发出BusRd信号, 存储器第5块经Bus传送到Cache C第1块, Cache C第1块状态从I变成S
CPU B 写第5块CPU B写命中, Cache B向Bus发出写作废信号, Cache A第1块和Cache C第1块状态都从S变成I, Cache B第1块状态从S变成E
CPU D 读第5块替换 Cache D的块1Cache B的块1写回CPU D读不命中, Cache D发出BusRd信号, Cache B监听到后把它的第1块写回到存储器第5块, 然后状态从E变成I。之后该块又从存储器传送到Cache D第1块, 状态设为E
CPU B 写第21块替换CacheB 的块1CPU B写不命中, Cache B发出BusRdx信号, 存储器第21块经Bus传送到Cache B第1块, 将原本的第1块替换出去, 状态设为E
CPU A 写第23块替换CacheA的块3CPU A读不命中, Cache A发出BusRdx信号, 存储器第23块经Bus传送到Cache A第3块, 状态设为E
CPU C 写第23块替换CacheC的块3CacheA的块3写回CPU C写不命中, Cache C发出BusRdx信号, Cache A监听到该信号, 将其第3块写回到存储器第23块, 同时Cache A中该块状态改为I。之后存储器第23块传送到Cache C第3块, 状态设为E
CPU B 读第29块替换CacheB的块1CacheB的块1写回CPU B读不命中, Cache B发出BusRd信号, 存储器第29块经Bus传送到Cache B第1块, 将原来的块替换出去, 将状态设为S
CPU B 写第5块替换CacheB的块1CPU B写不命中, Cache B发出BusRdx信号, Cache D监听到该信号后将其第1块作废, 存储器第5块传送到Cache B第1块, 替换原来的块, 状态设为E

2) 请截图,展示执行完以上操作后整个cache系统的状态

image-20231209105438044

监听法的基本原理是,每个处理器核心的缓存都可以监视(监听)其他核心对共享数据的读写操作。当一个处理器核心对共享数据进行写入时,它会发送一个写入操作的通知(invalidate、update等)给其他核心的缓存,告知它们更新或无效化相应的缓存行。其他核心的缓存会在收到通知后,根据通知的类型进行相应的操作。

以下是监听法模拟的基本步骤:

  1. 每个处理器核心的缓存行都包含一个有效位(valid bit)用于表示缓存行是否有效,以及一个标签(tag)用于唯一标识该缓存行所存储的内存地址。
  2. 当一个处理器核心对共享数据进行写入操作时,它首先检查自己的缓存中是否存在该数据的缓存行。如果存在,它将更新缓存行中的数据,并将该缓存行标记为“已修改(modified)”。
  3. 同时,该核心会发送一个写入操作的通知给其他核心的缓存,通知它们该缓存行已经被修改。这个通知可以是无效化(invalidate)操作或更新(update)操作,具体的实现方式取决于具体的监听法协议。
  4. 其他核心的缓存在接收到通知后,根据通知的类型进行相应的操作:
    1. 如果接收到无效化操作,则将自己的缓存行标记为无效(invalid),以后再访问该数据时需要从主内存或其他核心的缓存中重新获取。
    2. 如果接收到更新操作,则将自己的缓存行中的数据更新为最新的数据。
  5. 当一个处理器核心需要读取共享数据时,它首先检查自己的缓存中是否存在有效的缓存行。如果存在有效的缓存行,则直接读取缓存中的数据。如果缓存行无效,则需要从主内存或其他核心的缓存中获取最新的数据。

通过监听法模拟,每个核心都能感知到其他核心对共享数据的操作,并及时进行相应的缓存行更新或无效化,从而保持多核系统中缓存中的数据一致性。这种方式能够有效解决多核处理器中共享数据的一致性问题,提高系统的可靠性和性能。

2、cache一致性算法-目录法模拟

1)利用目录法模拟器进行下述操作,并填写下表

所进行的访问监听协议进行的操作与块状态改变
CPU A 读第6块Cache A读不命中 从本地存储器中传送第6块到Cache A第2块, Cache A该块状态设为S, 存储器中第6块状态也设为S, 将对应A的presence bit置1
CPU B 读第6块Cache B读不命中, 通过互联网络从宿主存储器中传送第6块到Cache B第2块, Cache B该块状态设为S, 存储器中将对应B的presence bit置1
CPU D 读第6块Cache D读不命中, 通过互联网络从宿主存储器中传送第6块到Cache D第2块, Cache D该块状态设为S, 存储器中将对应D的presence bit置1
CPU B 写第6块Cache B写命中, 向宿主存储器发送写命中信号, 宿主存储器向A, D发送作废信号, 将第6块的A, D对应的presence bit复位, 将块状态设为E。 Cache B写第2块, 将块状态设为E
CPU C 读第6块Cache C读不命中, 向宿主存储器发送读缺失信号, 宿主存储器向Cache B发送Fetch信号, Cache B将其第2块状态设为S, 向宿主存储器写回该块。宿主存储器收到该块后将状态设为S, 将C对应的presence bit置1, 将该块传送给Cache C, Cache C将该块状态设为S
CPU D 写第20块Cache D写不命中, Memory C通过互联网络从宿主存储器中传送第20块到Cache D第0块, Cache D该块状态设为E, 存储器中将对应D的presence bit置1, 块状态设为E
CPU A 写第20块Cache A写不命中, 向宿主存储器中发送Write miss, 宿主存储器向Cache D发送Fectch信号, Cache D将其第0块写回宿主存储器, 将块状态设为I。 存储器中将对应D的presence bit复位, 将A对应的presence bit置1, 块状态设为E, 将该块传送给Cache A。 Cache A中该块状态设为E
CPU D 写第6块Cache D写不命中, 向宿主存储器发送Write miss, 宿主存储器向Cache D传送该块, 将对应B, C的presence bit复位, 将D对应的presence bit置1, 块状态设为E, 向Cache B, C发出作废信号。Cache D中该块状态设为E。 Cache B, C均将该块状态设为I
CPU A 读第12块Cache A读不命中, 第12块要替换出Cache A中的第0块, 先将原本的第0块写回到宿主存储器第20块, 存储器中第20块状态变成未缓冲。宿主存储器将第12块的状态设为S, 将A对应的presence bit置1, 将该块传送给Cache A。 然后换入, 块状态设为S

2)请截图,展示执行完以上操作后整个cache系统的状态

image-20231209105457476

目录法的基本原理是,每个缓存块都有一个对应的目录项。目录项中记录了该缓存块在哪些核心的缓存中被缓存,以及该缓存块的共享状态。

以下是目录法模拟的基本步骤:

  1. 每个处理器核心的缓存块都包含一个有效位(valid bit)用于表示缓存块是否有效,以及一个标签(tag)用于唯一标识该缓存块所存储的内存地址。
  2. 每个缓存块的目录项记录了哪些核心的缓存中包含该缓存块的副本,并记录了每个核心对该缓存块的共享状态,例如“独占(exclusive)”、“共享(shared)”、“无效(invalid)”等。
  3. 当一个处理器核心需要读取共享数据时,它首先检查自己的缓存中是否存在该数据的缓存块。如果存在有效的缓存块,它会从该缓存块中读取数据。如果缓存块无效,则需要从主内存或其他核心的缓存中获取最新的数据。
  4. 当一个处理器核心对共享数据进行写入操作时,它首先检查自己的缓存中是否存在该数据的缓存块。如果存在有效的缓存块,并且该缓存块的共享状态为“独占”,表示该核心是唯一一个拥有该数据副本的核心,那么该核心可以直接在缓存块中更新数据。
  5. 如果存在有效的缓存块,但其共享状态为“共享”,表示其他核心也拥有该数据的副本,那么该核心需要向目录发送一个请求,请求将该缓存块的共享状态变为“独占”。同时,目录会向其他包含该数据副本的核心发送无效化操作,让它们将缓存块标记为无效。
  6. 当其他核心的缓存接收到无效化操作时,它们将对应的缓存块标记为无效。如果其他核心的缓存块在之后的访问中需要读取或写入该数据,它们需要从主内存或其他核心的缓存中重新获取最新的数据。

通过目录法的模拟,每个核心都可以通过目录来获取共享数据的最新状态,同时协调共享数据的访问。目录维护了所有共享数据的副本信息和共享状态,通过协调缓存之间的通信和状态转换,确保多核处理器系统中缓存的一致性。

四、思考题

目录法和监听法分别是集中式和基于总线,两者优劣是什么?

答:

监听法

  • 优点:核数较少时,总线压力较小,成本低,效果好.

  • 缺点:需要通过总线广播一致性相关信息. 总线上能够连接的处理器数目有限。当核数增多时,总线冲突增加, 监听带宽成为瓶颈

目录法

  • 优点:使用集中目录来记录每个cache块的状态,不需要总线广播一致性信息, 总线压力小。

  • 缺点:需要维护目录数据结构, 随着核数增加时目录的开销变大。

五、实验总结

在我进行对cache一致性模拟器的实验过程中,我深入研究了监听法和目录法这两种常见的cache一致性协议。通过实际的模拟器操作,我对这两种协议的原理和工作机制有了更深入的理解。

首先,我发现监听法是一种基于总线的cache一致性协议。在这个协议中,所有的缓存控制器都通过总线来监听其他缓存控制器的操作。当一个缓存控制器修改了共享数据时,它会通过总线发送一个信号,让其他缓存控制器将对应的缓存行置为无效。这样,其他缓存控制器在需要访问这个缓存行时,就会重新从内存中读取最新的数据,保证了数据的一致性。通过实验,我清晰地观察到了监听法的特点:简单、易于实现,但是总线的带宽成为性能瓶颈,并且在大规模系统中会导致严重的总线竞争问题。

其次,我研究了目录法,这是一种基于目录的cache一致性协议。在这个协议中,每个缓存控制器都维护了一个目录表,用于记录共享数据的状态和位置。当一个缓存控制器修改了共享数据时,它会向目录表发送一个更新请求,将对应的缓存行置为无效或者共享状态。其他缓存控制器在需要访问这个缓存行时,需要先向目录表发出请求,获取该数据的状态和位置信息,然后根据相应的状态进行操作。通过实验,我发现目录法相对于监听法来说,减轻了总线的压力,提高了并发度和扩展性。然而,目录的维护和更新会带来一定的开销,特别是在多处理器系统中。

其他缓存控制器在需要访问这个缓存行时,需要先向目录表发出请求,获取该数据的状态和位置信息,然后根据相应的状态进行操作。通过实验,我发现目录法相对于监听法来说,减轻了总线的压力,提高了并发度和扩展性。然而,目录的维护和更新会带来一定的开销,特别是在多处理器系统中。

通过这次实验,我不仅对cache一致性的概念和原理有了更深入的理解,还通过实际模拟操作加深了对监听法和目录法的理解。我认识到在设计和选择cache一致性协议时,需要综合考虑系统规模、性能需求、开销以及硬件限制等方面的因素。不同的协议适用于不同的场景,了解它们的特点和优缺点有助于我们做出合适的选择。同时,我也意识到cache一致性对于多处理器系统的正确性和性能具有重要影响,因此在实际应用中需要仔细权衡

相关文章:

HNU计算机体系结构-实验3:多cache一致性算法

文章目录 实验3 多cache一致性算法一、实验目的二、实验说明三 实验内容1、cache一致性算法-监听法模拟2、cache一致性算法-目录法模拟 四、思考题五、实验总结 实验3 多cache一致性算法 一、实验目的 熟悉cache一致性模拟器(监听法和目录法)的使用&am…...

Go语言学习路线规划

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

微软NativeApi-NtQuerySystemInformation

微软有一个比较实用的Native接口:NtQuerySystemInformation,具体可以参考微软msdn官方文档:NtQuerySystemInformation, 是一个系统函数,用于收集特定于所提供的指定种类的系统信息。ProcessHacker等工具使用NtQuerySys…...

灵活与高效的结合,CodeMeter Cloud Lite轻云锁解决方案

众多软件开发商日渐认识到,威步推出的一系列尖端软件产品在维护知识产权、精确控制及有效管理软件授权方面发挥着不可或缺的作用。这些产品的核心功能包括将许可证及其他关键敏感数据安全地存储于高端复杂的硬件设备、经过专业加密的文件,或者置于受严格…...

Flink 系列文章汇总索引

Flink 系列文章 一、Flink 专栏 本专栏系统介绍某一知识点,并辅以具体的示例进行说明。 本专栏的文章编号可能不是顺序的,主要是因为写的时候顺序没统一,但相关的文章又引入了,所以后面就没有调整了,按照写文章的顺…...

计算机网络——期末考试复习资料

什么是计算机网络 将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路和通信设备连接起来;实现资源共享和数据传递的计算机的系统。 三种交换方式 报文交换:路由器转发报文; 电路交换:建立一对一电路 分组交换&a…...

【数据结构】面试OJ题——链表

目录 1.移除链表元素 思路: 2.反转链表 思路: 3.链表的中间结点 思路: 4.链表中的倒数第K个结点 思路: 5.合并两个有序链表 思路: 6.链表分割 思路: 7.链表的回文结构 思路: 8.随机链表…...

flask web开发学习之初识flask(三)

文章目录 一、flask扩展二、项目配置1. 直接配置2. 使用配置文件3. 使用环境变量4. 实例文件夹 三、flask命令四、模版和静态文件五、flask和mvc架构 一、flask扩展 flask扩展是指那些为Flask框架提供额外功能和特性的库。这些扩展通常遵循Flask的设计原则,易于集成…...

【设计模式-3.1】结构型——外观模式

说明:本文介绍设计模式中结构型设计模式中的,外观模式; 亲手下厨还是点外卖? 外观模式属于结构型的设计模式,关注类或对象的组合,所呈现出来的结构。以吃饭为例,在介绍外观模式之前&#xff0…...

flutter学习-day2-认识flutter

📚 目录 简介特点架构 框架层引擎层嵌入层 本文学习和引用自《Flutter实战第二版》:作者:杜文 1. 简介 Flutter 是 Google 推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开发 App&#…...

解决selenium使用.get()报错:unknown error: unsupported protocol

解决方法 将原来的: url "https://www.baidu.com" browser.get(url)替换为: url "https://www.baidu.com" browser.execute_script(f"window.location.replace({url});") # 直接平替 .get()问题解析 之前运行都是正…...

关于加密解密,加签验签那些事

面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公钥加密、私钥解密、私钥加签、公钥验签。这些都什么鬼?或许在你日常工作没有听说过这些名词,但是一旦你要设计一个对外访问的接口&#xff…...

容器重启后,Conda文件完整保存(虚拟环境、库包),如何重新安装conda并迁移之前的虚拟环境

Vim安装 容器重启后默认是vi,升级vim,执行命令 apt install -y vim安装 Anaconda 1. 下载Anaconda 其他版本请查看Anaconda官方库 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --no-check-certificate…...

gitee对接使用

1.创建一个文件夹 2.进入Gitee接受对方项目编辑 3.打开终端初始化一开始创建的文件夹 git init 3.1打开终端 3.2输入git.init 4.克隆对方的项目 4.1进入Gitee复制对方项目的路径 4.2在编辑器终端内克隆对方项目 git clone 网址 如此你的编辑器就会出现对方的项目 …...

C语言中的一维数组与二维数组

目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组 数组的创建 数组是一组相同类型元素的集合。 int arr1[10]; char arr3[10]; float arr4[10]; double arr5[10];下面这个数组能否成功创建? int count…...

【Linux】地址空间

本片博客将重点回答三个问题 什么是地址空间? 地址空间是如何设计的? 为什么要有地址空间? 程序地址空间排布图 在32位下,一个进程的地址空间,取值范围是0x0000 0000~ 0xFFFF FFFF 回答三个问题之前我们先来证明地址空…...

作为一个产品经理带你了解Axure的安装和基本使用

1.Axure的简介 Axure是一种强大的原型设计工具,它允许用户创建交互式的、高保真度的原型,以及进行用户体验设计和界面设计。Axure可以帮助设计师和产品经理快速创建和共享原型,以便团队成员之间进行沟通和反馈。Axure提供了丰富的交互组件和功…...

接口测试总结及其用例设计方法

接口测试的总结文档   第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍…...

2023团体程序设计天梯赛——模拟赛和总决赛题

M-L1-1 嫑废话上代码 Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。 输出格式: 在一行中输出…...

智能优化算法应用:基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂鸟算法4.实验参数设定5.算法结果6.参考…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...