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)向上传递到缓存层次结构。

二、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,就会出现问题。

(gdb) call $4->printAddr(0x400000)
Couldn't find method SimObject::printAddr
"JavaScript engine fundamentals: Shapes and Inline Caches" 是指JavaScript引擎的基本概念:Shapes(形状)和Inline Caches(内联缓存)。 1. Shapes(形状):在JavaScript引擎中,每个对象都有一个形状,用于描述对象的结构和属性。形状包含对象的属性名称、偏移量和其他相关信息。当创建一个新对象时,引擎会根据对象的属性来确定其形状,并将该形状与对象关联起来。这样,在后续对同一形状的对象进行操作时,引擎可以更高效地执行。 形状对于优化JavaScript代码的执行非常重要。引擎可以根据对象的形状来进行内存布局和属性访问的优化,提高代码的执行效率。如果对象的形状发生变化(例如添加或删除属性),引擎会为该对象创建一个新的形状,并相应地调整相关操作。 2. Inline Caches(内联缓存):内联缓存是一种用于加速函数调用和属性访问的技术。当使用JavaScript代码调用函数或访问对象属性时,引擎会在编译阶段生成内联缓存,将函数调用或属性访问与特定的对象关联起来。 内联缓存可以避免每次函数调用或属性访问时都进行动态查找和解析。引擎会根据对象的形状和属性的特征,将函数调用或属性访问的地址直接嵌入到代码中。这样,在后续对同一对象进行函数调用或属性访问时,引擎可以直接使用内联缓存中的地址,避免了额外的查找和解析开销。 通过使用Shapes和Inline Caches,JavaScript引擎可以提高代码的执行效率和性能,加快函数调用和属性访问的速度。这些基本概念是JavaScript引擎优化和执行的关键部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值