【计算机组成与体系结构Ⅱ】多Cache一致性的模拟分析(实验)

实验八:多Cache一致性的模拟分析

一、实验目的

1:加深对多 Cache 一致性的理解。

2:进一步掌握解决多 Cache一致性的目录协议和监听协议的基本思想。

3:掌握在各种情况下, 目录协议和监听协议是如何工作的,能给出要进行什么样的操作以及 状态的变化情况。

二、实验平台

多 Cache一致性目录协议模拟器和监听协议模拟器

三、实验内容和步骤

Part I:多 Cache 一致性目录协议的模拟与分析

1:掌握多 Cache一致性目录协议模拟器的使用方法

点击【帮助】——【使用说明】,即可查看目录法模拟器的使用方法。

【0:基本显示】

该模拟器模拟4个CPU(A、B、C、D)访存的工作过程。每个CPU中都有一个Cache,该Cache包含4个块,其块地址为0~3。分布式共享存储器中有32个块,其块地址为0~31。Cache中每个块的状态用色块来表示,其中灰色表示“无效”状态,淡青色表示“共享”,橘红色表示“独占”。主存中块的状态由其右边的目录项的颜色来表示,未缓冲状态由黄色来表示,其他两种状态同Cache块。

对于每个CPU,可以指定所要进行的访问是读还是写(从列表中选),并在输入框中输入所要访问的主存块号,然后用鼠标点击在其右边的标有+的按钮,模拟器就将开始演示该在执行过程中,模拟器会在窗口的左上角显示相关的信息。

该模拟器的主菜单有4个:配置,操作,统计,帮助。

【1:配置】

该菜单用于进行配置参数的显示与设置。你可以修改动画播放速度:把游标往右边拖搜可提高播放速度,往左边拖拽可降低播放速度。你还可以选择是否进行优化传块。优化传块是指当要访问的块在某个Cache中,且处于独占状态时,可以不用等该块写回主存后再从主存调块,而是可以直接将该块传送给发出访问请求的结点。


本模拟器采用直接映象方法和写回法。

【2:操作】

可以通过该菜单中的选项来控制模拟器的执行。该菜单下有以下3个选项:单步执行、连续执行、复位。

  1. 单步执行:选用该方式后,点击鼠标或点击左上角的“步进”按钮,都会使模拟器前进一步。
  2. 连续执行:选用该方式后,用鼠标点击标有+的按钮,模拟器会连续演示整个过程,直至该访问结束。
  3. 复位:使模拟器复位,回到初始状态。

【3:统计】

该菜单用于显示模拟器的统计结果,包括各处理机的访问次数、命中次数、不命中次数以及命中率。

【4:帮助】

该菜单下有“关于”和“使用说明”两个选项。

2:对于以下访问序列, 写出目录协议所进行的操作

所进行的访问

目录协议所进行的操作

CPU A 读第 6 块

CPU读Cache A

Cache A不命中

本地向宿主发读不命中(A,6)消息

宿主把数据块送给本地

共享集合为{A}

CPU读Cache A第2行

CPU B 读第 6 块

CPU读Cache B

Cache B不命中

本地向宿主发读不命中(B,6)消息

宿主把数据块送给本地

共享集合为{A,B}

CPU读Cache B第2行

CPU D 读第 6 块

CPU读Cache D

Cache D不命中

本地向宿主发读不命中(D,6)消息

宿主把数据块送给本地

共享集合为{A,B,D}

CPU读Cache D第2行

CPU B 写第 6 块

CPU写Cache B

Cache B命中

本地向宿主发写命中(B,6)消息

宿主向远程结点A发作废(6)消息

宿主向远程结点D发作废(6)消息

共享集合为{B}

CPU写Cache B第2行

CPU C 读第 6 块

CPU读Cache C

Cache C不命中

本地向宿主结点发读不命中(C,6)消息

宿主给远程发取数据块(6)的消息(写回)

远程把数据块送给宿主结点(写回ing)

宿主把数据块送给本地结点(写回主存后再写cache)

共享集合为{B,C}

CPU读Cache C第2行

CPU D 写第 20 块

CPU写Cache D

Cache D不命中

本地向宿主结点发写不命中(D,20)消息

宿主把数据块送给本地结点

共享集合为{D}

CPU写Cache D第0行

CPU A 写第 20 块

CPU写Cache A

Cache A不命中

本地向宿主结点发写不命中(A,20)消息

宿主给远程结点发送取并作废(20)的消息

远程把数据块送给宿主结点(写回),把Cache中的该块作废

宿主把数据块送给本地结点

共享集合为{A}

CPU写Cache A第0行

CPU D 写第 6 块

CPU写Cache D

Cache D不命中

本地向宿主结点发写不命中(D,6)消息

宿主给远程结点发送取并作废(6)的消息

宿主给远程结点发送取并作废(6)的消息

宿主把数据块送给本地结点

共享集合为{D}

CPU写Cache D第2行

CPU A 读第 12 块

CPU读Cache A

Cache A不命中

本地向被替换块的宿主结点发写回(替换第20块后需要写回,因为只有1个副本)并修改共享集(A,20)消息

本地向宿主结点发读不命中(A,12)消息

宿主把数据块送给本地结点

共享集合为{A}

CPU读Cache A第0行


【访问序列】


【Cache模拟器统计信息】

3:自己编写一个访问序列, 写出目录协议所进行的操作

所进行的访问

是否发生替换

是否发生写回

目录协议所进行的操作

CPU A 读第 5 块

读cache A,不命中

本地:向宿主结点发读不命中(A,5)消息

宿主:把数据块送给本地结点

共享集合为:{A}

数据送入cache A的第1行,由CPU A读取

CPU B 读第 5 块

读cache B,不命中

本地:向宿主结点发读不命中(B,5)消息

宿主:把数据块送给本地结点

共享集合为:{A,B}

数据送入cache B的第1行,由CPU B读取

CPU C 读第 5 块

读cache C,不命中

本地:向宿主结点发读不命中(C,5)消息

宿主:把数据块送给本地结点

共享集合为:{A,B,C}

数据送入cache C的第1行,由CPU C读取

CPU B 写第 5 块

写cache B,命中

本地:向宿主结点发写命中(B,5)消息

宿主:向远程结点A发作废(5)消息

宿主:向远程结点C发作废(5)消息

共享集合为:{B}

CPU B写cache B第1行【独占】

CPU D 读第 5 块

读cache D,不命中

本地:向宿主结点发读不命中(D,5)消息

宿主:给远程结点发取数据块(5)的消息

远程:把数据块送给宿主结点【cache B第1行对应的主存第5块,写回主存】

宿主:把数据块送给本地结点

共享集合为:{B,D}

数据送入cache D的第1行,由CPU D读取

CPU B 写第 21 块

写cache B,不命中

本地:向被替换块的宿主结点发修改共享集(B,5)消息【cache B第1行对应的主存第5块替换为第21块】

本地:向宿主结点发写不命中(B,21)消息

宿主:把数据块送给本地结点

共享集合为:{B}

CPU B写cache B第1行【独占】

CPU A 写第 23 块

写cache A,不命中

本地:向宿主结点发写不命中(A,23)消息

宿主:把数据块送给本地结点

共享集合为:{A}

CPU A写cache A第3行【独占】

CPU C 写第 23 块

写cache C,不命中

本地:向宿主结点发写不命中(C,23)消息

宿主:给远程结点发送取并作废(23)的消息

远程:把数据块送给宿主结点,把cache中的该块作废【cache A第3行对应的主存第23块,写回主存】

宿主:把数据块送给本地结点

共享集合为:{C}

CPU C写cache C第3行【独占】

CPU B 读第 29 块

读cache B,不命中

本地:向被替换块的宿主结点发写回并修改共享集(B,21)消息【cache B第1行对应的主存第21块替换为第29块,并写回主存第21块】

本地:向宿主结点发读不命中(B,29)消息

宿主:把数据块送给本地结点

共享集合为:{B}

数据送入cache B的第1行,由CPU B读取

CPU B 写第 5 块

写cache B,不命中

本地:向被替换块的宿主结点发修改共享集(B,29)消息【cache B第1行对应的主存第29块替换为第5块】

本地:向宿主结点发写不命中(B,5)消息

宿主:向远程结点发作废(5)消息

宿主:把数据块送给本地结点

共享集合为:{B}

CPU B写cache B第1行【独占】

 


【访问序列】


【Cache模拟器统计信息】

4:根据上述结果,画出相关的状态转换图(仅画出与上表有关的部分)

5:目录协议的基本思想是什么?

目录协议的核心:物理存储器中共享数据块的状态及相关信息存在目录中。

PART II:多 Cache 一致性监听协议的模拟与分析

1:掌握多 Cache 一致性监听协议模拟器的使用方法


点击【帮助】——【使用说明】,即可查看目录法模拟器的使用方法。

2:对于以下访问序列,写出监听协议所进行的操作

所进行的访问

是否发生替换

是否发生写回

监听协议所进行的操作

CPU A 读第 5 块

CPU读Cache A

Cache A不命中

总线不命中

数据从存储器第5块送入Cache A第1块

CPU读Cache A第1块,显示共享

CPU B 读第 5 块

CPU读Cache B

Cache B不命中

总线不命中

数据从存储器第5块送入Cache B第1块

CPU读Cache B第1块,显示共享

CPU C 读第 5 块

CPU读Cache C

Cache C不命中

总线不命中

数据从存储器第5块送入Cache C第1块

CPU读Cache C第1块,显示共享

CPU B 写第 5 块

CPU写Cache B

Cache B命中

总线作废

Cache A第1块和Cache B第1块作废

存储器第5块tag,送入Cache B第1块

CPU写Cache B第1块,显示独占

CPU D 读第 5 块

CPU读Cache D

Cache D不命中

Cache B写回存储器第5块

数据从存储器第5块送入Cache D第1块

CPU读Cache D第1块,显示共享

Cache B第1块,显示共享

CPU B 写第 21 块

CPU写Cache B

Cache B不命中

总线写不命中

存储器第21块tag,送入Cache B第1块,发生块内替换

CPU写Cache B第1块,显示独占

CPU A 写第 23 块

CPU写Cache A

Cache A不命中

总线写不命中

存储器第23块tag,送入Cache A第3块

CPU写Cache A第3块,显示独占

CPU C 写第 23 块

CPU写Cache C

Cache C不命中

总线写不命中

Cache A写回存储器第23块

存储器第23块tag,送入Cache C第3块

CPU写Cache C第3块,显示独占

CPU B 读第 29 块

CPU读Cache B

Cache B不命中

Cache B写回存储器第21块

总线读不命中

数据从存储器第29块送入Cache B第1块,发生块内替换

CPU读Cache B第1块,显示共享

CPU B 写第 5 块

CPU写Cache B

Cache B不命中

总线写不命中

存储器第5块tag,送入Cache B第1块

总线作废Cache C第1块

CPU写Cache B第1块,显示独占


【访问序列】


【Cache模拟器统计信息】

3:自己编写一个访问序列, 写出监听协议所进行的操作

所进行的访问

是否发生替换

是否发生写回

监听协议所进行的操作

CPU A 读第 6 块

读cache A,不命中

向总线发送不命中

数据从存储器第6块送入cache A第2行

CPU A读cache A第1行,显示共享

CPU B 读第 6 块

读cache B,不命中

向总线发送不命中

数据从存储器第6块送入cache B第2行

CPU B读cache B第1行,显示共享

CPU D 读第 6 块

读cache D,不命中

向总线发送不命中

数据从存储器第6块送入cache D第2行

CPU D读cache D第1行,显示共享

CPU B 写第 6 块

写cache B,命中

向总线发送(6)作废消息

作废掉cache A第2行、cache D第2行

CPU B写cache B第2行,显示独占

CPU C 读第 6 块

读cache C,不命中

向总线发送不命中

将cache B第2行对应的(6)写回存储器

数据从存储器第6块送入cache C第2行

CPU C读cache C第2行,显示共享

CPU D 写第 20 块

写cache D,不命中

向总线发送不命中

数据从存储器第20块送入cache D第0行

CPU D写cache D第0行,显示独占

CPU A 写第 20 块

写cache A,不命中

向总线发送不命中

将cache D第0行对应的(20)写回存储器

作废掉cache D第0行

数据从存储器第20块送入cache A第0行

CPU A写cache A第0行,显示独占

CPU D 写第 6 块

写cache D,不命中

向总线发送不命中

数据从存储器第6块送入cache D第2行

作废掉cache B第2行、cache C第2行

CPU D写cache D第2行,显示独占

CPU A 读第 12 块

读cache A,不命中

将cache A第0行对应的(20)写回存储器

向总线发送不命中

数据从存储器第12块送入cache A第0行

CPU A读cache A第0行,显示共享


【访问顺序】


【Cache模拟器统计信息】

4:根据上述结果,画出相关的状态转换图(仅画出与上表有关的部分)

5:监听协议的基本思想是什么?

    监听协议的核心:Cache中保存各块的共享状态,共享总线,总线监听。

四、实验总结

1:监听协议是基于总线的。在监听协议中,所有的缓存控制器都通过总线来监听其他缓存控制器的操作。当一个缓存控制器修改了共享数据时,它会通过总线发送一个信号,让其他缓存控制器将对应的缓存行置为无效。这样,其他缓存控制器在需要访问这个缓存行时,就会重新从内存中读取最新的数据,保证了数据的一致性。

2:目录协议是集中式的。在目录协议中,每个缓存控制器都维护了一个目录表,用于记录共享数据的状态和位置。当一个缓存控制器修改了共享数据时,它会向目录表发送一个更新请求,将对应的缓存行置为无效或者共享状态。其他缓存控制器在需要访问这个缓存行时,需要先向目录表发出请求,获取该数据的状态和位置信息,然后根据相应的状态进行操作。

3:监听协议的特点分析:
    优点:核数较少时,总线压力较小,成本低,效果好。
    缺点:需要通过总线广播一致性相关信息. 总线上能够连接的处理器数目有限。当核数增多时,总线冲突增加, 监听带宽成为瓶颈。

4:目录协议的特点分析:
    优点:使用集中目录来记录每个cache块的状态,不需要总线广播一致性信息, 总线压力小。
    缺点:需要维护目录数据结构, 随着核数增加时目录的开销变大。

5:在设计和选择cache一致性协议时,需要综合考虑系统规模、性能需求、开销以及硬件限制等方面的因素。不同的协议适用于不同的场景。

6:实现cache一致性的关键——跟踪记录共享数据块的状态。

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

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

相关文章

跨Android、iOS、鸿蒙多平台框架ArkUI-X

ArkUI是一套构建分布式应用界面的声明式UI开发框架。它使用极简的UI信息语法、丰富的UI组件、以及实时界面预览工具,帮助您提升移动应用界面开发效率30%。您只需使用一套ArkTS API,就能在Android、iOS、鸿蒙多个平台上提供生动而流畅的用户界面体验。 一…

16.7 基于递归神经网络的分层多楼多层室内定位

文献来源:西交利物浦大学 Elesawi A E A, Kim K S. Hierarchical multi-building and multi-floor indoor localization based on recurrent neural networks[C]//2021 Ninth International Symposium on Computing and Networking Workshops (CANDARW). IEEE, 202…

MySQL优化之SQL调优策略

首先以一张思维导图从全局上给大家分享以下几种SQL优化策略,再详细讲解 1、避免使用SELECT * 在阿里的编码规范中也强制了数据库查询不能使用SELECT *,因为SELECT *方式走的都是全表扫描,导致的结果就是查询效率非常低下,其原因为…

苹果笔记本 macbook 在 office word 中使用 mathtype 的方法

前言 想在 MacBook 中使用 mathtype,去搜索,去 Apple Store 下载也发现没有 解决方法 打开 office Word 的「插入」中的「获取加载项」、「我的加载项」。 在应用商店中下载,需要登录自己的微软账号。 加载成功后就可以使用了。 注意 和…

【Unity实战100例】Unity对Ini格式的配置文件管理和读写

目录 一.编写ini格式配置文件 二.读取解析ini文件 三.调用属性 INI 文件以文本形式存储,易于阅读和编辑。这种人可读的格式使得调整配置参数变得更加直观,不需要专门的工具。 INI 文件是一种轻量级的配置文件格式,不需要复杂的解析器或库。它的结构相对简单,适用于小到

What is `addFormattersdoes` in `WebMvcConfigurer` ?

addFormatters 方法在SpringMVC框架中主要用于向Spring容器注册自定义的格式化器(Formatter) SpringMVC内置了一系列的标准格式化器,用于处理日期、数字和其他常见类型的转换。 开发者也可以通过实现 WebMvcConfigurer 接口,并重写…

Unix时间戳

时间戳,相信很多相关专业的人,计算机软件电子等等都会听过。由于最早是由Unix系统使用所以又叫Unix时间戳。 Unix 时间戳(Unix Timestamp)定义为从UTC(世界协调时)/GMT(格林尼治时)…

内网穿透的应用-使用Docker搭建一个Wiki.Js知识库系统并实现分享他人远程创作

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整…

KNN算法原理及应用

理解KNN 算法原理 KNN是监督学习分类算法,主要解决现实生活中分类问题。 根据目标的不同将监督学习任务分为了分类学习及回归预测问题。 监督学习任务的基本流程和架构: (1)首先准备数据,可以是视频、音频、文本、…

【C++】STL 算法 - 累加填充算法 ( 元素累加算法 - accumulate 函数 | 元素填充算法 - fill 函数 )

文章目录 一、元素累加算法 - accumulate 函数1、函数原型分析2、代码示例 二、元素填充算法 - fill 函数1、函数原型分析2、代码示例 一、元素累加算法 - accumulate 函数 1、函数原型分析 在 C 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 accu…

晶格动力学 GULP 软件的安装步骤

---------------------------------------------------------------------- GULP软件现已发展到5.2版本,其使用Fortran编译器,可运行在Linux/Unix系统下,但不提供任何Windows版本的技术支持。 下载网址: http://gulp.curtin.ed…

flink 最后一个窗口一直没有新数据,窗口不关闭问题

flink 最后一个窗口一直没有新数据&#xff0c;窗口不关闭问题 自定义实现 WatermarkStrategy接口 自定义实现 WatermarkStrategy接口 窗口类型&#xff1a;滚动窗口 代码&#xff1a; public static class WatermarkDemoFunction implements WatermarkStrategy<JSONObject…

10种较流行的网络安全框架及特点分析

网络安全框架主要包括安全控制框架&#xff08;SCF&#xff09;、安全管理框架&#xff08;SMP&#xff09;和安全治理框架&#xff08;SGF&#xff09;等类型。对于那些希望按照行业最佳实践来开展网络安全能力建设的企业来说&#xff0c;理解并实施强大的网络安全框架至关重要…

Demystifying CXL Memory with Genuine CXL-Ready Systems and Devices——论文阅读

MICRO 2023 Paper CXL论文阅读汇总 问题 对更大容量和更高带宽的内存的不断增长的需求推动了基于Compute eXpress Link&#xff08;CXL&#xff09;的内存扩展和分离技术的创新。特别是&#xff0c;基于CXL的内存扩展技术不仅能够经济地扩展内存容量和带宽&#xff0c;还能够…

【数据结构】二叉树(遍历,递归)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​​ 目录 二叉树遍历规则 前序遍历 ​…

flutter 客户端日志上传定位错误信息

背景 flutter 开发的app 安装到真机上 无法定位报错信息&#xff0c;只能使用usb连接电脑 使用adb logcat来查看日志效率低下。 想法 如果将flutter 开发的app 运行的时候 将日志写进一个日志文件里面去&#xff0c;然后给flutter app搭建一个http服务器&#xff0c;后端知道对…

如何使用VNC实现Win系统远程桌面Ubuntu图形化界面【内网穿透】

文章目录 推荐前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 …

vue:处理base64格式文件pdf、图片预览

一、需求&#xff1a;后端返回是base64数据&#xff0c;需要前端处理来展示文件。 二、实现方法&#xff1a; 解释一下这段代码的功能&#xff1a; &#xff09;preview(item) 是一个函数&#xff0c;接受一个参数 item&#xff0c;其中包含了文件的相关信息。 &#xff09;首…

HTML5+CSS3+JS小实例:实时给中文添加拼音

实例:实时给中文添加拼音 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"&…

使用freessl为网站获取https证书及配置详细步骤

文章目录 一、进入freessl网站二、修改域名解析记录三、创建证书四、配置证书五、服务启动 一、进入freessl网站 首先进入freessl网站&#xff0c;需要注册一个账号 freessl网站 进入网站后填写自己的域名 接下来要求进行DCV配置 二、修改域名解析记录 到域名管理处编辑域名…