gem5学习(23):经典缓存——Classic Caches

这篇具有很好参考价值的文章主要介绍了gem5学习(23):经典缓存——Classic Caches。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Interconnects

1、Crossbars

二、Debugging


官网教程:gem5: Classic caches

默认缓存是一个带有MSHR(未命中状态保持寄存器)和WB(写缓冲区)的非阻塞缓存,用于读取和写入未命中。缓存还可以启用预取(通常在最后一级缓存中)。

在gem5中实现了多种可能的替换策略和索引策略。这些策略分别定义了给定地址可以用于块替换的可能块,以及如何使用地址信息来找到块的位置。默认情况下,缓存行使用LRU(最近最少使用)进行替换,并使用集合关联策略进行索引。

一、Interconnects

1、Crossbars

crossbar中的两种流量类型是内存映射数据包(memory-mapped packets)和嗅探数据包(snooping packets)。内存映射请求沿着内存层次结构向下传递,而响应沿着内存层次结构向上传递(相同的路径返回)。嗅探请求水平传递并向上传递到缓存层次结构,嗅探响应水平传递并向下传递(相同的路径返回)。普通的嗅探请求水平传递,而快速嗅探(express snoops)向上传递到缓存层次结构。

gem5学习(23):经典缓存——Classic Caches,gem5学习,学习

二、Debugging

在经典内存系统中,有一个功能可以在调试器(例如gdb)中显示特定块的一致性状态。这个功能是建立在经典内存系统对功能访问的支持之上的。你可以通过注入一个命令设置为PrintReq的功能请求来使用这个功能。该请求会穿过内存系统,类似于常规的功能请求,但对于匹配的任何对象(如其他排队的数据包、缓存块等),它只会简单地打印出有关该对象的一些信息。

在Port(端口)上有一个名为printAddr()的辅助方法,它接受一个地址并构建一个适当的PrintReq数据包并注入。由于它使用与正常功能请求相同的传播机制,所以需要从一个可以在整个内存系统中传播的端口中注入,例如在CPU处。在MemTest、AtomicSimpleCPU和TimingSimpleCPU对象上都有辅助的printAddr()方法,它们只是在各自的缓存端口上调用printAddr()方法。(请注意:后两个方法未经过测试。)

(gdb) set print object
(gdb) call SimObject::find(" system.physmem.cache0.cache0.cpu")
$4 = (MemTest *) 0xf1ac60
(gdb) p (MemTest*)$4
$5 = (MemTest *) 0xf1ac60
(gdb) call $5->printAddr(0x107f40)

system.physmem.cache0.cache0
  MSHRs
    [107f40:107f7f] Fill   state:
      Targets:
        cpu: [107f40:107f40] ReadReq
system.physmem.cache1.cache1
  blk VEM
system.physmem
  0xd0

这段描述表明cache0.cache0为特定地址分配了一个MSHR(未命中状态保持寄存器),以处理来自CPU的目标ReadReq请求,但该请求尚未被处理(否则它将被标记为正在服务中)。在cache1.cache1中,该块是有效的、独占的和已修改的,并且在物理内存中,该字节的值为0xd0。

这段描述提供了有关特定块的一致性状态的一些信息,尽管可能不是完整的。然而,它仍然非常有用。你可以根据需要进行扩展。此外,还有一个当前未使用的详细程度参数,可以用于输出不同级别的信息。

需要注意的是,额外的“p(MemTest*)$4”是必需的,因为尽管“set print object”显示了派生类型,但在内部,gdb仍然将指针视为基础类型的指针。因此,如果你尝试直接在$4指针上调用printAddr,就会出现问题。文章来源地址https://www.toymoban.com/news/detail-825070.html

(gdb) call $4->printAddr(0x400000)
Couldn't find method SimObject::printAddr

到了这里,关于gem5学习(23):经典缓存——Classic Caches的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • gem5学习(15):Memory system

    目录 一、MemObjects 二、Ports 三、Connections 四、Request 五、Packet 六、Access Types 七、Packet allocation protocol 八、Timing Flow control 九、Response and Snoop ranges 官网教程:gem5: Memory system M5的新内存系统的设计目标如下: 在旧的内存系统中,有两种类型的访问:计时访问和功能访问(Unify

    2024年01月16日
    浏览(43)
  • gem5学习(13):使用默认配置脚本——Using the default configuration scripts

    目录 一、A tour of the directory structure 1、boot/ 2、common/ 3、dram/ 4、example/ 5、learning_gem5/ 6、network/ 7、nvm/ 8、ruby/ 9、splash2/ 10、topologies/ 二、Using se.py and fs.py 三、Some common options se.py and fs.py 在这个教程中,将探讨如何使用gem5附带的默认配置脚本。 gem5附带了许多配置脚本,使

    2024年01月16日
    浏览(54)
  • 服务器上使用docker搭建gem5-gcn3环境

    3步:拉取镜像,编译gcn,测试square 1、拉取镜像 默认主机有梯子/代理,根据官网步骤 gem5 gpu:AMD VEGA GPU 报错: 解决,需要在github上设置一下token信息,参考链接 关于容器注册表支持。设置步骤: 重新拉取镜像, 报错: Error response from daemon: manifest unknown,清单未知。去gem

    2024年02月02日
    浏览(56)
  • AWS 专题学习 P5 (Classic SA、S3)

    专题内容总览和系列博客目录 https://blog.csdn.net/weixin_40815218/article/details/135590291 辅助资料( PDF ) https://download.csdn.net/download/weixin_40815218/88741566 让我们了解我们所见过的所有技术如何协同工作 这是一个你需要百分百熟悉的部分 我们将通过许多示例案例研究看到解决方案架构师思

    2024年01月20日
    浏览(39)
  • 23-MyBatis缓存、本地缓存、分布式Redis缓存、前端缓存

             MyBatis一级缓存、          MyBatis二级缓存、          本地缓存:单节点          分布式Redis缓存:多节点          前端sessionStorage缓存:会话缓存          前端localStorage缓存:前端本地缓存 MyBatis一级缓存默认是开启的。 在Spring Boot中需要添加

    2024年02月13日
    浏览(36)
  • 【LeetCode-面试经典150题-day23】

    目录 108. 将有序数组转换为二叉搜索树  148.排序链表  427.建立四叉树  23.合并K个升序链表   108. 将有序数组转换为二叉搜索树 题意: 给你一个整数数组  nums  ,其中元素已经按  升序  排列,请你将其转换为一棵  高度平衡  二叉搜索树。 高度平衡  二叉树是一棵满足「

    2024年02月09日
    浏览(45)
  • React经典面试题 附详细答案(23年8月)

    React中的组件生命周期有哪些? 答:React中的组件生命周期包括挂载阶段、更新阶段和卸载阶段。具体的生命周期方法有: 挂载阶段:constructor、render、componentDidMount 更新阶段:render、componentDidUpdate 卸载阶段:componentWillUnmount React中的setState是同步还是异步的? 答:setState方法

    2024年02月11日
    浏览(40)
  • Redis经典问题:缓存穿透

    (笔记总结自《黑马点评》项目) 用户请求的数据在缓存中和数据库中都不存在,不断发起这样的请求,给数据库带来巨大压力。 常见的解决方式有缓存空对象和布隆过滤器。 思路:当我们客户端访问不存在的数据时,先请求redis,但是此时redis中没有数据,此时会访问到数

    2024年02月09日
    浏览(34)
  • 全面解析缓存应用经典问题

    随着互联网从简单的单向浏览请求,发展为基于用户个性信息的定制化以及社交化的请求,这要求产品需要做到以用户和关系为基础,对海量数据进行分析和计算。对于后端服务来说,意味着用户的每次请求都需要查询用户的个人信息和大量的关系信息,此外大部分场景还需

    2024年02月16日
    浏览(36)
  • 2023-06-23:redis中什么是缓存击穿?该如何解决?

    2023-06-23:redis中什么是缓存击穿?该如何解决? 答案2023-06-23: 缓存击穿是指一个缓存中的热点数据非常频繁地被大量并发请求访问,当该热点数据失效的瞬间,持续的大并发请求无法通过缓存获取到数据,而直接访问数据库,这就好像在一个稳固完好的容器上打开了一个洞

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包